- 论坛徽章:
- 40
|
本帖最后由 forgaoqiang 于 2016-10-28 23:42 编辑
1、你了解微服务吗?SOA和微服务有何差异?最近国内外技术论坛博客上微服务话题非常热门,个人也读过一些文章,对微服务也有些理解。
微服务架构属于应用技术架构,和B/S架构类似。强调的是把复杂的“巨型单应用”拆分成小的应用,数据上也从集中存储拆分为更小的存储单元。
至于SOA是企业架构的范畴,主要是把业务上分解为不同的服务,不同的物理系统提供不同的服务,注重的是系统之间通过服务进行互联交互的规范,对于如何实现这些服务并没有做规定。
因此个人理解是,SOA是更大一些的架构规范,没有规定具体实现,而微服务则是如何实现具体的业务,两者并没有直接关系。完全可以使用SOA实现企业服务,具体的服务则通过微服务的形式进行拆解。
2、到底在什么样的情况才适合使用微服务架构?
①首先,微服务架构的应用肯定是用在较大规模的服务上,规模大指的是业务发杂程度高。
②需要经常进行升级修改的服务,对于多年不需要变化的服务没有必要进行拆分。
③系统越来越庞大,启动速度过慢,无法进行维护。
④不同服务根据实际需求需要采用不同的技术实现(甚至是不同语言实现)的时候。
3、服务与服务之间的事务怎么做?接口的调用权限如何控制,粒度在方法级别的?
为了保证数据的一致性,事务是不可避免要上的,每个服务都有一个用RPC-或者消息驱动API定义清楚的边界。服务之间的通信和Java的ESB不同,微服务应用采用简单轻量级协议,比如REST,而不是WS-,在微服务内部避免使用ESB以及ESB类似功能。微服务架构模式也拒绝使用canonical schema等SOA概念。
每个服务都根据内部处理情况返回结果,服务仍然需要分层,一旦底层服务调用失败,要有对应的异常处理机制。至于权限控制,目前来看不可避免的需要在每次调用的是有带上token凭据,微信公共号开发就是类似的原理,保证权限控制,粒度应该在每次调用都需要进行检查。
4、为什么有人说“玩不起”?较比普通架构需要多做那些工作?
这个的确会增加复杂度,首先整个系统是分布式的,而且数据存储也是分离的,即使根据CAP原理,要保证数据的一致性也会变得更加困难,比如有以下的难题:
①服务因为是分布式的,业务调试难度增加,沟通成本显著增加。
②微服务架构模式应用的改变会波及多个服务,特别是服务之间有依赖的情况,需要协调多服务变更。
③每个服务都有自己的实例,运行状态,需要分别配置、部署、监控,还要实现服务的发现机制,目前视乎不像SOA那样有成熟的服务发现机制。
以前看过一篇文章说明比如构建一个滴滴打车或者Uber一样的应用,提出了传统和微服务的两种架构,感觉不错,的确可以参考:
①这个是传统的单应用架构,核心是业务逻辑
![]()
下面是微服务方式实现的,每一个应用功能区都使用微服务完成,另外,Web应用会被拆分成一系列简单的Web应用
![]()
|
|