1、微服务
就是一些协同工作小而自治的服务,很小,但是专注于做好一件事。微服务的目的就是有效的拆分应用,实现敏捷开发和部署。
单块系统内,通常会参照单一设计模式,建立抽象层后者模块来保证内聚性。
微服务将这个理念应用在独立的服务上,根据业务的便捷来确定服务的边界,这样很容易确认某个功能的代码应该放在哪里。
微服务保证是一个独立的自治服务,服务之间通过网络调用进行通信,从而加强服务的隔离性
微服务可以帮助我们更快的采用新技术,并且理解验证新技术的好处,尤其对于单块系统而且,采用一个新语言、数据库或者框架都会对整个系统产生巨大的影。对于微服务系统而言,可以选择一个风险最小的服务采用新技术,即便出现问题也容易处理。
单块服务职能作为一个整体进行扩展。即时系统中只有一小部分存在性能问题,也需要对整个服务进行扩展。如果使用微服务,则可以只对需要扩展的服务进行扩展,可以把哪些不需要扩展的服务运行在更小,性能更差的硬件上。
在单块应用中,即时只修改了一行代码,也需要重新部署整个应用才能发布该变更。这种部署影响大,风险高。微服务架构可以更快地对特定部分的代码进行部署,如果出现问题,可以很容易快速回滚,客户可以快速使用新功能。
微服务与SOA的关系与区别
- 微服务相比于SOA更加精细,微服务更多的以独立的进程的方式存在,互相之间并无影响;
- 微服务提供的接口方式更加通用化,例如HTTP RESTful方式,各种终端都可以调用,无关语言、平台限制;
- 微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下更适合;
微服务的发展
出现SOA和微服务框架与业务的发展、平台的壮大密不可分。
- 单一应用架构
- 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
- 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
- 垂直应用架构
- 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
- 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
- 分布式服务架构
- 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
- 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
- 流动计算架构
- 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
- 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。
平台随着业务的发展从 All in One 环境就可以满足业务需求(以Java来说,可能只是一两个war包就解决了);发展到需要拆分多个应用,并且采用MVC的方式分离前后端,加快开发效率;在发展到服务越来越多,不得不将一些核心或共用的服务拆分出来,其实发展到此阶段,如果服务拆分的足够精细,并且独立运行,我觉得就可以将之理解为一个微服务了。
微服务架构特点:
- 能支持当前业务需求,当然这只是最最基本的条件;
- 每个微服务都要去中心化,不存在单点故障;
- 每个微服务都要实现高可用、高负载,不会因为一个服务不可用而影响了整套业务流;
- 每个微服务都要高度通用化,即多种终端都可调用,不分语言和平台;
- 服务部署或升级简单,不会消耗大量人力并且部署过程不易出现人为错误;
- 微服务具有快速注册与自动发现功能(例如dubbo框架)
微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。
架构的好与坏
架构是服务于业务的,能快速方便的满足业务需求的架构才是好的架构,才是好的架构!