SpringCloud01
微服务架构
- 微服务是一种架构模式,或者说是一种架构风格,提倡将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间相互协调,互相配置,为用户提供最终的价值。服务之间采用轻量级的通信机制互相沟通(HTTP、RPC),每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言,工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储(每个服务模块是一个独立的进程,可以有自己独立的数据库,甚至可以不同的服务使用不同的语言进行实现,因为他们的本质式通信)
微服务与微服务架构
- 微服务:具体到某个业务功能模块的一个应用服务
- 微服务架构:一种架构模式如上所述
微服务的优缺点
- 优点
- 单一职责
- 服务功能内聚,足够小,代码容易理解,能够聚焦到指定的业务功能
- 开发简单,效率高,可能一个团队就专精于一个服务模块开发
- 服务是松耦合的,是有功能意义的服务,开发阶段或部署阶段都是独立的
- 微服务的服务模块可以使用不同的语言进行开发
- 能够灵活的进行服务模块集成与部署,集成工具Jenkins,Hudson,bamboo
- 微服务模块更易于开发人员的理解,能够专注于自己的业务功能
- 微服务只是业务逻辑代码(后端),不涉及前端页面
- 每个服务都可以有自己的数据库也可以有统一的数据库
- 缺点
- 开发的时候需要处理分布式诞生的问题(分布式的四个问题)
- 服务模块过多,运维压力增大
- 服务间通信成本
- 数据一致性
- 系统部署依赖
- 系统集成测试
- 性能监控
微服务技术栈
微服务条目 | 落地技术 |
---|---|
服务开发 | SpringBoot、Spring、SpringMVC |
服务配置与管理 | NetFlix公司的Arcchaius、阿里的Diamond等 |
服务注册与发现 | Eureka、Consul、Zookeeper |
服务调用 | Rest、RPC、gRPC |
服务熔断器 | Hystrix、Envoy |
负载均衡 | Ribbon、Nginx |
服务接口调用 | Feign |
消息队列 | Kafka、RabbitMQ、ActiveMQ |
服务配置中心管理 | SpringCloudConfig、Chef |
服务路由(API网关) | Zuul |
服务监控 | Zabbix、Brave、Dapper |
服务部署 | Docker、OpenStack、Kubernetes |
数据流操作开发包 | SpringCloud Stream(封装与Redis、Rabbit、Kafka等发送接收消息) |
事件消息总线 | SpringCloud Bus |