微服务概述
之前马丁的文章
微服务优缺点
微服务优点:
- 单一职责
- 服务内聚,足够小,代码容易理解,聚焦单一业务功能需求
- 松耦合,开发阶段部署阶段都是独立的
- 能使用不同的语言开发,因为基于轻量级通信
- 易于第三方集成,微服务容易灵活部署,持续集成工具:jenkins、Hudson、bamboo
- 容易理解修改维护
- 只是业务逻辑代码
- 每个微服务都有自己的存储能力,可用有自己的数据库,或使用统一数据库
缺点:
- 要处理分布式系统的复杂性
- 多服务运维难
- 系统部署依赖
- 服务间通信成本
- 数据一致性
- 系统集成测试
- 性能监控。。。
微服务技术栈:
- 服务开发
- spring
- springMVC
- springBoot
- 服务配置与管理
- NetFlix公司的Archaius
- 阿里的Diamond
- 服务注册与发现
- Eureka
- Consul
- ZooKeeper
- 服务调用
- Rest
- RPC
- gRPC
- 服务熔断
- Hystrix
- Envoy等
- 负载均衡
- Ribbon
- Nginx等
- 服务接口调用
- Feign等
- 消息队列
- Kafka
- RabbitMQ
- ActiveMQ等
- 服务配置中心管理
- SpringCloudConfig
- Chef等
- 服务路由(API网关)
- Zuul等
- 服务监控
- Zabbix
- Nagios
- Metrics
- Specatator等
- 全链路追踪
- Zipkin
- Brave
- Dapper等
- 服务部署
- Docker
- OpenStack
- Kubernetes等
- 数据流操作开发包
- SpringCloudStream(封装Redis,Rebbit,Kafka等发送接收消息)
- 事件消息总线
- SpringCloud Bus
SpringCloud和SpringBoot关系
- SpringBoot专注于开发单个个体微服务,打成jar包
- SpringCloud将SpringBoot开发的单体服务整合起来
- 为服务之间提供配置管理、服务发现、断路由、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务
- SpringCloud无法离开SpringBoot
- SpringCloud关注全局的服务治理框架
Dubbo和SpringCloud技术选型
现在开发流程
- CDN加速器
- 负载均衡可能有很多层,LVS 、Nginx,负载均衡可水平拆分,多个Lvs多个Nignx
- 服务一般以集群的样子,Nginx在负载一个个的服务器Tomcat
- 服务要跟文件系统打交道,分布式文件系统 ,xxxDFS,文件服务器要对分布式文件系统读写,所以是双向箭头
- Tomcat要去注册中心获取服务
- 获取服务需要有服务提供者,dubbo-admin注册服务到注册中心
- 服务者后面可能有多个数据库,数据库容量不足可能水平拆分,要实现读写分离可能要垂直拆分,读和写分成两部分数据库进行工作
- 读写分离之间需要数据同步,MyCat做数据同步,保证数据的一致性
- 读数据要水平扩展,写数据需要垂直扩展
- 服务提供者连接数据库需要一些缓存机制,将数据放入非关系型数据库Redis,以K-V键值对的形式,Redis还能做集群
- 搜索引擎来优化 ElasticSerach
- 提供者到缓存还需要消息中间件,队列机制,异步机制,消息在排队等着,处理完成就将消息返回
Dubbo中间停滞了一段时间,SpringCloud更加的完善,SpringCloud牺牲了服务调用的性能,避免了原生RPC带来的问题,而且Rest比RPC更加灵活,服务提供者和消费者之间一纸契约,不存在代码级别的强依赖,在微服务环境下更加合适
SpringCloud做大最大兼容性,保证了稳定性,但是Dubbo的自由度更高,但是需要更高的技术人员
如何自学:
https://www.springcloud.cc/spring-cloud-config.html
[springCloud中文网站](