惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
IT之家
IT之家
Google DeepMind News
Google DeepMind News
罗磊的独立博客
爱范儿
爱范儿
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
U
Unit 42
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
B
Blog
博客园 - 叶小钗
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - xvhfeng

blog搬迁 2012 年度总结 2011年年度总结 albian使用方法-1 hashTable和多线程问题 albian开发笔记五--谈缓存同步 albian开发笔记四 albian开发笔记三 albian开发笔记二 albian开发笔记一 Albian开发库的设计与规划 《程序员入职锦囊妙计》终于完成了 FastMQ V0.2.0 stable版发布 实现线程内同一对象 发现你的优势测评结果 DFS架构 FastMQ V0.1.1使用方法 开源消息队列FastMQ V0.1.0 发布 linux环境C编程的血泪教训
albian开发笔记六-albian的架构
xvhfeng · 2011-08-01 · via 博客园 - xvhfeng

      很久之前就想写这篇文章,但是作为一个技术人员,苦于但是只是心中有概念和想法,实施还没有真正的开始,所以一直没有写。现在,albian的net实现主体部分已经完成了75%左右,单机已经可以勉强凑合的运行了,所以心中有了底气,才写这篇关于albian架构的文章。这一篇完成后,下面一连几篇都将会讲述albian的使用方法,从简单开始一直到复杂。

     说起albian的架构,就要说起albian的起源。albian其实来源于本人在电商圈内的一些开发经验和实际的项目实施。虽然电商的经验不多,但是加上“站在巨人的肩膀上”,也能勉强的凑合着把albian搞出来。由此可见,albian其实完全是为了电商行业量身定做的(上个星期拿着albian去和朋友交流,朋友提出了很多的意见,最后只有几个被接纳了,丢掉的都是经过讨论和互联网或者电商差别比较大的)。所以albian其实不太适合MIS或者ERP此类的系统。那么就要说到互联网、电商和MIS、ERP传统行业的不同特点问题。其实这些合适或者不合适最大的问题在于互联网、电商面对的一般是海量、高并发的问题;而MIS或者ERP一般面临的是数据的复杂关系、复杂的业务的问题。因为不管是互联网、电商、MIS或者是ERP,归根结底都是面向数据库的编程(创造一个名词:ODBP),所以最终的问题都会是在数据库层面上表现。相对于互联网、电商,数据库中的单表数据量可能很大(有KW甚至更大的),而且数据库也要面临着严重的读压力(互联网经典的2-8原则),但是因为本身数据的特点,数据之间的相关关系性不强,往往很少有相关联3次及以上的表;但是MIS或者ERP就完全不同,单表的压力比较小(一般是在W级别,很少有10W或者100W的,KW的几乎绝迹),但是表之间的相关外键等关系确实错综复杂,而且MIS、ERP相对面向的用户群也是固定的,所以读写压力一般都是可控的。所以如果需要搭建架构,那么就需要面对两种完全不同的特点搭建架构,也许有人说搭建一套就行了,加上开关即可。我个人还是认为一个人同时只能做一件事才能把这件事做好,所以albian还是只是面向互联网或者电商行业。 albian的架构其实很简单,我们先看一张图即可基本上明白albian是怎么一回事:

如果没看懂就看一下文字说明:个人认为用1,2,3这种方法最能说明清楚,所以还是按照这种格式来说明:

  1. albian其实是一个面向服务和面向数据的框架,它并不提供UI层的实现;
  2. albian一共提供了5个组件来搭建整个底层框架,这5个分别是:Albian Manager Server;Albian Distributed Locker Server ;Albian IOC;Albian ORM; Albian DataBase Router;
  3. Albian Manager Server:主要提供整个使用Albian环境的管理,比如注册Albian、检查Albian、重启Albian等等,因为这些功能对于服务器的性能要求不高,所以这台机器还可以用来作为多台Albian Distributed Locker Server的manager  server;
  4. Albian Distributed Locker Server:主要提供对象在各个应用程序边界的锁,或者说是进程间的锁。功能和Mutex的线程间的锁功能类似,只是Mutex是锁住同一进程内或者说是应用程序边界的对象,让某一线程独享该对象;而Albian Distributed Locker Server提供的是锁住整个应用程序系统(不是操作系统,而是整个站点系统)内的对象,让某一进程或者应用程序边界独享该对象。Albian Distributed Locker Server和Mutex一样是一种编程规则,如果你不使用这种规则,程序也可以运行,但是不保证不会出现进程间的数据不同步问题。使用方法一般也是先获取Albian Distributed Locker Server上的锁,再获得进程内的Mutex,释放的步骤正好相反;Albian Distributed Locker Server的实现目前已经确定会是放到linux上,用纯C实现,业务代码的行数估计也就是K级别的;
  5. Albian IOC:是一个简单的依赖注入实现。它只是简单提供了生成对象并且由Albian托管控制功能。之所以不实现例如参数注入、属性注入等等问题,还是因为觉得没必要去实现这些,一来增加了复杂度,二来albian认为重要的不是在IOC这里,IOC只要能提供一些最简单、最简洁的功能,实现运行性能的最优化即可;
  6. Albian ORM:是一个简单的ORM实现。鉴于互联网和电商的特点,Albian ORM删掉了相比市面上成熟的ORM少的多的功能,因为互联网那和电商基本上只是相对“单表”化的,所以Albian只提供“单表”的操作,而一旦表之间需要关系的维护,那么只有麻烦程序员了。
  7. Albian Database Router:这是Albian整个系统架构的重点。Albian Database Router的实现理论是著名的CAP理论(不知道CAP理论的请google一下)。但是Albian Database Router为了实现海量数据存储和操作的效率,Albian Database Router最后还是在CAP的C上面做了文章,将一致性的要求降低,使用最后一致性来保证效率。Albian Database Router支持多数据库的访问,包括异构数据库。Albian Database Router还支持将对象routing到指定的数据库、指定的表;Albian Database Router提供了用户自定义routing规则的接口;Albian Database Router还提供了乐观的分布式事务解决方案(常见Distributed Algorithms的wait-free termination概念)。

对于Albian的总体架构和重点的Router功能,看下面两个示意图:

    这是一个读写分离示意图,Albian DataBase Router将会根据配置将数据理由到左边的数据库中,然后再通过数据库之间的同步,将数据同步到后边的MySql中,这样我们就可以查询右面的MySql来减轻DB的压力了;

    这是多次写的示意图,及但一个对象持久化时,根据Albian Database Router的配置,可以将一个对象同时写到两个数据库中去。