很抱歉,之前分析的zookeeper leader选举算法有误,特此更正说明. 那里面最大的错误在于,leader选举其实不是在大多数节点通过就能选举上的,这一点与传统的paxos算法不同,因为如果这样的话,就会出现数据丢失的情况.比如某台服务器其实有最多的数据量,按照规则而言应该是leader,但是由于启动晚了,最后只能把leader让给其它的服务器.这里面存在明显的时序问题,也就是说leader服务器启动的早晚会影响整个过程. 实际上并不是这样,leader选举算法只有在收到所有参与服务器的…
使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基于react全家桶(React.React-router-dom.redux.styled-components)开发的一套博客后台管理系统,用于前端小站的管理,主要功能包括游客浏览.文章管理.类别管理.评论通知.推荐设置和用户管理 [访问地址] 域名:https://admin.xiaohuoch…
Zookeeper 源码(五)Leader 选举 前面学习了 Zookeeper 服务端的相关细节,其中对于集群启动而言,很重要的一部分就是 Leader 选举,接着就开始深入学习 Leader 选举. 一.选举规则 Leader 选举是保证分布式数据一致性的关键所在.当 Zookeeper 集群中的一台服务器出现以下两种情况之一时,需要进入 Leader 选举. 服务器初始化启动 服务器运行期间无法和 Leader 保持连接 下面以服务器启动时期的 Leader 选举为例进行分析讲解. 在集群…
核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配置中心化.配置中心化是一个支持模块开发的框架必备功能. ABP中核心功能模块中的一些功能的运行时的行为是依赖于一些外部配置的.这一点应该不难理解. 简单解释下,比如Localization这个功能模块,最基本Abp需要知道要做哪些语言的本地化.而这些具体的配置对于Abp底层框架来说是不可预知的,那么…
ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationException异常就可以,无须做额外处理.这类异常往往是需要维护人员介入分析的. 其他四个异常都在AbpController中被集中处理,处理分为两步:一,通过EventBus触发异常事件,相应的异常处理函数则处理异常.二,针对AbpValidationException,UserFriendlyExc…
ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, session, authorization (permission management), setting management, language management, audit logging等核心功能.ABP中的这些功能具体实现都依赖外部的持久层,所以ABP框架中仅仅定义了接口和一些空的实现…
AuditLog: 继承自Entity<long>的实体类.封装AuditLog的信息. AuditingStore: 实现了IAuditingStore接口,实现了将AuditLog的信息保存到数据库的功能.其通过IRepository<AuditLog, long>实例完成对数据库的操作. BackgroundJobStore :  实现了IBackgroundJobStore接口,通过IRepository<BackgroundJobInfo, long>完成对B…
ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展.同时重写了ABP核心模块中的permission功能,以实现授权.注意:ABP仅仅使用了Asp.Net Identity的身份认证功能,但没有使用Asp.Net Identity中的基于role和Claim的授权. ABP Zero 中扩展的Asp.Net Identity实体类: AbpUser, AbpRole. AbpUser: 代表user的Enti…
ABP Zero模块扩展了ABP基础框架中的本地化功能,实现了通过数据库管理本地化的功能.其通过数据库保存本地化语言及其资源. ApplicationLanguage:代表本地化语言的实体类.一种语言就是一个ApplicationLanguage实例. ApplicationLanguageProvider:实现了ILanguageProvider接口,通过IApplicationLanguageManager实例设置DefaultLanguage和获取应用所配置的Language的列表. Ap…
ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig:定义了一个配置项,用于配置外部认证源.默认情况下,ABP Zero使用AbpUser表作为身份认证的数据源,但是我们也可以使用其他数据源做身份认证,比如AD或其他数据库.这种情况下,就需要通过UserManagementConfig将这个外表身份认证数据源添加进来.后文关于Ldap身份认证的文章会…