Albian是一个开源的企业级开发库。它提供了我们在开发过程中使用的ORM、IOC等功能。但是如果Albian只是提供这些功能,那么现在市面上随便找找开源的框架就可以集成。Albian真正的亮点在于它提供的另外几个实用但是市面上很少提供的功能。数据库(表)路由、读写分离、异构数据库、分布式锁服务、缓存同步,分布式锁等等功能。
功能解释:
ORM、IOC:谁都知道,不解释;
1.数据库(表)路由:通俗一点说句是分库分表。单我们的数据量猛增的时候,任何一个关系型数据库都无法使用单库、单表来支撑。那么我们这个时候就会想到按照业务分。这也是一种不错的办法。但是当一个业务的数据大到单库单表无法承受时,你怎么办?那么就对单库单表在拆分吧!现在市面上的ORM基本上都没有提供这个功能的,但是这个功能在互联网企业非常需要也非常实用。那么Albian就会支持这种功能。你只需要对于你的实体进行简单的routing配置,在实体保存时,它会自动的根据你的配置和分表算法(比如hash pid)保存到你指定的数据库或者表中;
2.读写分离:这个功能现在一般都是通过数据库同步来完成的!这也未尝不是一种很好的办法!当然,Albian也支持这种做法。其实Albian自己也可以完成这个功能,不需要数据库同步,唯一的遗憾就是当仅仅使用Albian完成这个功能时,对于保存数据有一定的性能损耗,因为保存的时候数据要保存多份(其实根据经验,一下子写只要不超过8份,基本可以接受),当读取的时候,根据你指定的routingName即可从你想加载数据的数据库(表)中加载数据。这个场景比较适合于还没有做搜索,但是需要提供多中查询搜索数据的场景;你可以对一份数据做不同的索引,存放到不同的数据库或者表,这样你可以最大的节省你的搜索性能。
3.异构数据库:Albian支持MSSQL,MySql,Oracle三种数据库,异构数据库就是指一个对数据库进行的request操作(比如insert,update,delete)Albian可以同时使用这三种数据库。比如我们将核心的业务使用Oracle,但是日志记录到MySql,而日志很重要,必须要同步完成(或者说在一个事务中完成),那么Albian就可以给你完成这个任务,Albian会根据你配置的routing,同时把数据库保存到你需要的数据库上(哪怕一个是oracle,一个是Mysql也可以)。
4.分布式锁服务:这是在大型互联网应用中,当我们有多台业务服务器时,我们对于一个业务单体(比如同一个商品进行操作时)时,需要的加锁。我们现在知道的一般是进程内线程间的锁,这是锁住一个对象在一个进程中不能被同时使用的,那么分布式锁就是系统内进程间的锁,锁住一个对象在系统内同时只能被一个进程操作(进程的锁还是使用框架内置的来保证)。这个组件及其重要,并且压力应该比较大。目前考虑这个组件将会使用纯c在linux上实现;
5.缓存同步功能。当我们开发的系统时,对于一些不变或者少变的数据还是放在本地比较好,memcached的速度在0.4毫秒/条,本地应该在0.1毫秒内。但我们的对象很多时,就算是通过memcached来得到数据也是一个很大的时间开销。那么当我们有多台业务机器缓存同一个对象时,如果一台机器上的该缓存对象状态被改变了,我们就要通知别的服务器更新此对象。这就是同步服务的由来。这个组件目前也在考虑是否要放到linux实现?!
6.分布式事务:其实很简单,就是对于两台数据库进行操作,我们能实现原子操作。现在的分布式事务服务比如MSDTC等都比较麻烦,而且使用的代价也很高。Albian准备自己实现一个,虽然可能Albian实现的分布式事务不能完全成为分布式事务,但是实用,能完成功能就行,实用主义!
设计原则:
1.实用主义:用该用的,放弃不该用的;
2.让正确的对象完成正确的事情:比如惰性加载、外键关系。这些在Albian中将不会存在,这部分实在是应该让程序员来完成的。如果程序员这些都不干的话,不知道他应该干什么了?再比如分布式锁服务放到linux,完全是因为windows的内存管理实在是让我费解,而linux这块正好又是强项,那么就linux吧!
3.可控:当你面对现在市面上的一些框架时最愁的是什么?不是功能不能实现,而是可控的太少。什么都实现了,完全傻瓜化,那还要程序员干嘛?
4.一件事情只有一个方法完成:很多框架一件事情提供了很多的实现方法,美其名曰:灵活。但是殊不知这正是“罪恶”的来源。正因为灵活,所以导致了前一个人干的活,下一个完全看不懂,每上来一个人都有想重构的冲动。所以在Albian中,要完成一件事情只能用一个方法;
Albian开发计划:
1.实现带routing的ORM,大概需要3-4个月时间;
2.实现IOC,这部分现在还未考虑;
3.实现缓存同步;
4.实现分布式锁;
5.将缓存同步和锁迁移到linux上
6.将Albian迁移到java平台;
PS:因为Albian完全是个人利用业余时间开发,故时间上可能有比较大的调整
目前情况:
目前Albian项目已经开始开发,项目的地址为:http://code.google.com/p/albian/ 有兴趣可以关注啦!