一、背景
软件架构,总是在不断的演进中…
把时间退回到二十年之前,当时企业级领域研发主要推崇的还是C/S模式,PB、Delphi这样的开发软件是企业应用开发的主流。随着时间的推移,基于浏览器的B/S架构开始渐渐流行了起来。初期,Web开发ASP还占据了不少优势,但JSP的预编译模式让性能有了很大提升,随后基于JAVA语言的J2EE架构变得越来越流行。
早期软件架构基本都是单体架构,系统之间往往不需要进行交互,这也导致数据孤岛和ETL工具的发展。随着企业应用越来越多,相互的关系也越来密切,应用之间也迫切需要进行实时交互访问,随后基于XML的异构系统集成和数据交互技术开始被很多公司采用,SOA的概念被提了出来,web service逐渐流行。
互联网时代,很多公司为了适应更加灵活的业务需求,基于HTTP协议和Restful的架构风格及简洁和结构清晰的JSON语言成为企业开发的最佳实践,在SOA架构中,企业服务总线技术ESB所暴露的集中式架构的劣势让开发者明白基于注册和发现的分布式架构才是解决问题的关键办法。由此,微服务架构开始盛行。
在《微服务设计》中如何界定一个微服务,就是使用松耦合&高内聚原则,把因相同因素变化的事情聚集在一起,把因不同因素变化的事情区隔开来。
二、微服务架构特性
微服务,其实是一种架构风格…
2.1 异构
服务不同最适合的技术方案不同,微服务可以帮助我们轻松采用不同的技术,并且理解这些新技术的好处。尝试新技术通常伴随着风险,但对于微服务系统而言,总会存在一些地方让你可以选择一个风险最小的服务采用新技术,并降低风险。
2.2 隔离
微服务架构将系统分解为独立运行单元,给系统带来更好的隔离性,独立的微服务在发生异常时更容易定位和隔离问题,隔离性也是服务扩展性的基础。
2.3 扩展
庞大的单体服务只能作为一个整体进行扩展,即使系统中只有一小部分模块存在性能问题,也需要对整个系统进行扩展。而微服务架构可以根据性能需要对不同的模块进行水平扩展,微服务的弹性也可以很好地处理服务不可用和功能降级问题。
2.4 部署简单
在微服务架构中,各个服务的部署是独立的,这样就可以更快地对特定部分的代码进行部署。服务出现问题也更容易快速回滚,同时敏捷的交付和部署带来了更好的业务需求响应体验。
2.5 灵活
在微服务架构中,系统会开放很多接口供外部使用,当情况发生改变时,可以使用不同的方式构建应用。而整体化的应用程序只能提供一个非常粗粒度的接口供外部使用。把单体应用分解成多个微服务,可以达到可复用、可组合的目的。
三、微服务与网关技术
下图是一个典型的微服务架构,仅供参考。
3.1 什么是微服务网关
微服务网关是微服务架构中的一个关键的角色,用来保护、增强和控制对于微服务的访问,微服务网关是一个处于应用程序或服