1、微服务架构概念
简而言之,微服务架构就是将一个完整的应用从数据存储开始水平/垂直拆分成多个不同的服务。每个服务都能独立部署、独立维护、独立扩展,各服务之间通过诸如RESTful API(http)的方式互相调用。即微服务是自理自治的服务单元。
说明:拆分角度有垂直拆分/水平拆分。
水平拆分:按照业务对系统进行划分。举个例子,原系统包括了运营和支付,现水平拆分为运营系统和支付系统。优点是:不同业务,往往性能要求,以及请求量是不一样的。拆分后保证业务之间的可用性影响最小化。
垂直拆分:将同样的系统按照应用场景(调用方)进行拆分 。举个例子,原系统的支付场景中包括了用户支付,第三方调用 支付,现垂直拆分为用户支付,商户支付。优点:各个垂直服务调用之间相互不影响,自理自治;通过配置可以进行上游调用降级等。2、SpringBoot回顾
优势:1.为所有Spring开发者更快的入门
2.开箱即用,提供各种默认配置来简化项目配置
3.内嵌式容器简化Web项目
4.没有冗余代码生成和XML配置的要求
3、微服务架构进化
服务化的核心就是将传统的一站式应用拆分成一个个的应用,而微服务在这个基础上要更彻底地去耦合,并且强调DevOps和快速演化。说明:DevOps是英文Development和Operations的合体,他要求开发、测试、运维进行一体化的合作,进行更小、更频繁、更自动化的应用发布,以及围绕应用架构来构建基础设施的架构。
3.1、服务化进化之nginx
nginx通过接受客户端http请求,根据路径配置,转发,跳转相应的服务。缺点:
1.nginx配置中存在服务调用的逻辑
2.服务消费者不知道,真正服务提供者的实例。
3.服务提供者不易管理
也正是以上的缺点,演变出dubbo
3.2、服务化进化之dubbo
dubbo是阿里开源的一个SOA服务治理解决方案。服务消费者和提供者都可将服务信息注册到Register,形成了服务中心的组件。通过Monitor进行很好的服务管理,消费者可以进行负载均衡,服务降级等。缺点:
1.维护停止(阿里目前又着手维护)
2.dubbo严重依赖于第三方组件(zookeeper/redis)
3.由于dubbo的rpc调用,使得服务提供方与消费方有着代码层次的高强度耦合。
3.3、服务化之SpringCloud
SpringCloud提出是开发面向云端的Application,为微服务提供了全套的组件技术支撑。值得注意的是:SpringCloud抛弃了Dubbo的RPC通信,采用了基于Http的Rest方式通信。4、Spring Cloud的大家庭
服务治理:这是SpringCloud的核心。目前SpringCloud主要通过整合Netflix的相关产品来实现这方面的功能(Spring Cloud Netflix)。包括用于服务注册和发现的Eureka,调用断路器Hystrix,调用端负载均衡Ribbon,Rest客户端Feign,智能服务路由Zuul等。
分布式链路监控:Spring Cloud Sleuth提供了全自动、可配置的数据埋点,以收集微服务调用链路上的性能数据,并发送给Zipkin进行存储、统计和展示。
消息组件:Spring Cloud Stream对于分布式消息的各种需求进行了抽象,包括发布订阅、分组消费、消息分片等功能,实现了微服务之间的异步通信。Spring Cloud Stream也集成了第三方的RabbitMQ和Apache Kafka作为消息队列的实现。而Spring Cloud Bus基于Spring Cloud Stream,主要提供了服务间的事件通信(比如刷新配置)。
配置中心:基于Spring Cloud Netflix和Spring Cloud Bus,Spring又提供了Spring Cloud Config,实现了配置集中管理、动态刷新的配置中心概念。配置通过Git或者简单文件来存储,支持加解密。
安全控制:Spring Cloud Security基于OAUTH2这个开放网络的安全标准,提供了微服务环境下的单点登录、资源授权、令牌管理等功能。
下一篇:服务注册与发现Eureka