跟阿里数据库产品打过交道的人都知道它里面有个叫“头都大了”(TDDL,****** Distributed Data Layer)的路由代理,用它可以简化前端应用与后端数据库的连接,特别是当应用和数据库都成了分布式的时候,这是种N对N的连接。其实TDDL还并没有全部开源,近两年来有个在开源社区十分火爆的牛X产品叫“我的猫”(MyCat)。MyCat技术原理是它拦截了应用发送过来的SQL语句做特定分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的数据库节点,并将返回的结果做适当的处理,最终再返回给应用。MyCat发展到目前已经不再是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的数据库。
X86、虚拟化、容器、分布式数据库、微服务,所有这一切都是为了把我们的IT系统搭建起一个面向服务的架构,一个广义上的SOA。其实前面把SOA简单说成是做应用系统间的集成有失公允。因为当我们开发一个新应用时,也可以按照横竖切分的原则来设计服务的开发,形成一个个应用组件,然后通过ESB开放给开发团队使用。我所在的公司前几年搞过一个叫做uCloud的PaaS项目,其设计理念就是上述思路的体现。在ESB之下,开发集成了十几项技术服务和数据库服务供应用方使用,一个典型的SOA架构。问题出在在这样一个部门各自为政、应用开发以第三方厂家为主的公司,如果没有一个强有力的管理措施要求各方必须使用中央管理的Service API时,结果自然可以想象。这令我不得不想起一个叫康威的老外定的一条规律:软件设计的架构,实际上反应了公司的组织与沟通架构(Conway’ s law: Organizations which design systems [...] are constrained to produce designs which are copies of the communication structures of these organizations.)。