Zongsoft

Zongsoft

Zongsoft Studio

平滑的加权轮询均衡算法
前言在反向代理、路由、分布式应用调度等场景中通常都需要用到负载均衡算法,负载均衡的关键要点是“均衡”,即确保调用请求能均衡的落到多个处理节点上,负载均衡算法一般使用随机或轮询都可以保证均衡性。 现实中由于服务器性能或资源分配的差异,导致我们需要为服务节点设置不同的权重,权重高的节点得到更多流量,同时降低低权重节点的流量比例。也即带权重的均衡算法。 下面我们讨论几种常见的负载均衡算法,并针对其中一种给出完整的算法讲解及实现。 一、随机这是最简单的负载均衡算法,每次生成一个随机数,然后对服务节点数进行取模,模值即为服务节点序号,很明显这只能做到“均匀”,无法根据各服务节点的权重进行加权分配。...
Zongsoft.Data 发布公告
Zongsoft.Data 发布公告很高兴我们的 ORM 数据访问框架(Zongsoft.Data)在历经两个 SaaS 产品的应用之后,今天正式宣布对外推广!这是一个类 GraphQL 风格的 ORM(Object/Relational Mapping) 数据访问框架。 又一个轮子?在很长时间里,**.NET** 阵营似乎一直缺乏一个被普遍使用的 ORM 数据访问框架,从最早的原生 ADO.NET 到舶来品 iBatis.NET 和 Hibernate.NET,后来又经历了 Linq for SQL 与 Entity Framework 的混战,可能是因为 Entity F...
关于 IIS Express 常用设置
关于 IIS Express 常用设置 站点绑定IIS Express Web 服务器默认只绑定了 localhost 的主机名,这就意味着无法通过内网或其他自定义域名进行访问,可通过如下操作添加其他绑定。在Web宿主项目中的 .vs 目录中的 config 子目录中,有名为“applicationhost.config”配置文件,打开它后,找到如下节点: 1system.applicationHost/sites/site[name=xxxx]/bindings 在该绑定集中的添加一个首节点,假定绑定端口号为: 12345 1<binding protocol="...
代码失控与状态机(下)
序言在《代码失控与状态机(上)》的文末,我们留了一个解析「成员访问表达式」的“作业”,那么,通过本文我们一起来完成这个作业。 首先,为什么要苦哈哈的写一个这样看上去没什么用的解析器?因为在某些 IoC 或 AOP 容器中(不幸的是我需要实现一个这样的 IoC 容器),常需要动态求解成员访问表达式的值,而解析表达式就是第一步。其实这个“作业”正是编译器技术中词法解析的简化版,自己手动撸一遍,对理解《编译原理》的前端处理技巧是一个很好的入门练手。 其次,我现在正在造一个 ORM 数据引擎,该数据引擎有个很酷的特性就是在 CRUD 中支持类似 GraphQL 这样的功能(即数据模式表达式),所...
代码失控与状态机(上)
前言前几天和某某同学吃饭席间,他聊到每当要修改老项目中自己写的代码时就痛苦不堪,问我是不是也有同感。我觉得这应该是不少程序猿的心声,之所以会这样,大致有两个主因: 项目的整体设计很糟糕,只管往上堆砌各种功能、补丁,对于代码质量和结构关系基本无暇顾及,最终积重难返滑向失控。 对技术缺乏必要的敬畏心,基础不够扎实、知识面较窄,不能(无法)进行合理的规划,最终导致停留在低水平的代码堆砌上,只求完成功能就万事大吉。 程序猿饭桌上总少不了对产品经理的吐槽:“产品经理又对业务流程进行了疯狂调整,我觉得这会导致状态机无法支持了。”他的这个槽点让我一时有些语塞,倒不是怀疑产品经理的脑洞还能大到把状态...
实体类的动态生成(三)
前言在 .NET 中主要有两种动态生成并编译的方式,一种是通过 System.Linq.Expressions 命名空间中的 LambdaExpression 类的 CompileToMethod(...) 方法,但是这种方法只支持动态编译到静态方法,因为这个限制我们只能放弃它而采用 Emitting 生成编译方案,虽然 Emitting 方案强大但是实现起来麻烦不少,必须要手动处理底层 IL 的各种细节,脑补一些 C# 编译器的实现机理,同时还要了解一些基本的 IL(Intermediate Language) 和 CLR(JVM) 执行方面的知识。 基础知识因为要采用 Emittin...
实体类的动态生成(二)
前言由于采用字典的方式来保存属性变更值的底层设计思想,导致了性能问题,虽然.NET的字典实现已经很高效了,但相对于直接读写字段的方式而言依然有巨大的性能差距,同时也会导致对属性的读写过程中产生不必要的装箱和拆箱。那么这次我们就来彻底解决这个问题,同时还要解决“__哪些属性发生过变更__”、“__获取变更的属性集__”这些功能特性,所以我们先把接口定义出来,以便后续问题讲解。 1234567891011121314151617181920212223242526272829303132333435363738/* 源码位于 Zongsoft.CoreLibary 项目的 Zongsoft....
实体类的动态生成(一)
前言在应用开发中,通常都会涉及各种 POJO/POCO 实体类(DO, DTO, BO, VO)的编写,有时这些实体类还需要实现 INotifyPropertyChanged 接口以支持属性变更通知,一般我们都会手写这些代码或者通过工具根据数据库表定义抑或别的什么模板、映射文件之类的来静态生成它们。但是,在业务实现中往往伴随着诸如“__如何简单且高效的获取某个实体实例有哪些属性发生过变更?__”、“__变更后的值是什么?__”这样的问题,而大致的解决方法有: 由实体容器来跟踪实例的属性变更; 改造实体类(譬如继承特定实体基类,在基类中实现这些基础构造)。 方法(1)需要配合...
搭建 github.io 博客站点
前言很多人都有搭建博客或知识库站点的想法,可自己买云服务器太不划算,部署管理也是个问题;基于免费又热门的 GitHub Pages 来搭建博客站点倒是省钱省力省事的好办法,于是上网一搜,满屏都是关于使用 Jekyll 来搭建站点的文章,这个 Jekyll 是基于 Ruby 开发的,上手得先装一大坨东西、各种啰嗦各种坑,看的一点欲望都没有了。 神器出现平地一声雷,炸出了 Hexo (https://hexo.io/zh-cn) 这个神器。它只需要 NodeJS 即可,完全不依赖其他乱七八糟的玩意,安装部署超级简单,功能完善、漂亮主题也很多,妥妥的就是它了。 __Hexo __官网:htt...
avatar
Zongsoft
zongsoft.com