面向服务架构
1)面向服务架构指按照业务功能将模块垂直拆分成多个独立的服务;
2)面向服务架构只考虑垂直拆分;
3)垂直拆分要求业务隔离,一般也需要配合存储隔离,也就是每个服务使用自己的存储;
大白话
从上面第三点可以看出面向服务架构的缺点,每个服务有自己的存储,假设现在把一个单体应用拆分成A服务和B服务,A服务要访问数据库DB1,B服务要访问数据库DB2,这很完美,但是如果B服务同时需要访问DB1和DB2,那A服务和B服务就同时维护了访问数据库DB1的JDBC代码,随着系统的不断发展,这个问题会被不断放大。
解决方法是在原来基础进行水平拆分,按照三层架构把应用分成网关层、业务逻辑层、数据访问层,数据访问层的作用是屏蔽数据访问逻辑、屏蔽存储系统差异、屏蔽分库分表逻辑、屏蔽缓存逻辑。最简单当然是把数据访问层搞成一个单体应用,并且提供RPC接口给业务逻辑层来调用。
上面的SOA+水平拆分已经是微服务的原型了,微服务就是在上面基础上更加细分,重点在数据访问层,数据访问层的每个服务拥有独立数据库。