*time.geekbang.org/course/intr…
课程和背景介绍
课程重点是:微服务和云原生架构,运用Spring boot 和 kubernetes。_________________________________________________________________________________________________
微服务架构和云原生在github上开源的项目,可以学习和参考:
-
eShopOnContainers 微软主导的,超过1w🌟,用的.NET,项目偏复杂,微服务demo案例
-
microservices-demo 谷歌主导的,项目较简单,是google的技术栈展示
-
piggymetrics 是Spring技术栈的展示,同样也是demo案例
-
课件:pan.baidu.com/s/1Q7eP3yZ1… 提取码: 1aeh
什么时候才用微服务?
在项目初期使用单体架构,业务规模不大的时候不需要使用微服务架构,可以先使用单体模式开始,熟悉业务,再逐步拆分,之后演进出微服务架构。Martin fowler也有针对何时引入微服务架构作出分析。阿里爸爸巴巴,eBay都有从单体架构到微服务架构的演变。
Staffjoy架构设计思想:分而治之,单一职责,关注分离
Staffjoy技术选型:spring框架, react框架, k8s容器云, docker容器
Staffjoy的SaaS多租户设计,每个company是一个逻辑隔离的单位
Staffjoy 账户
Staffjoy ER 图
技术栈选型
开发微服务的3个主流开源框架:Dubbo(阿里巴巴), Spring Cloud(Netflix), k8s(google)
微服务关注点(common concerns)
微服务最终目标是实现业务价值,为了让dev能专注于业务交付,微服务需要做好底层基础设施的支撑,就是做好微服务公共关注点。
配置管理:对微服务应用的可变参数进行配置,例如链接数据库的string,调整缓存过期时间等
服务发现和负载均衡:服务分布在不同的节点上,他们之间要相互调用,首先要定位找到对方,是微服务架构的基本问题;另外服务一般以多实例部署,调用方需要负载均衡的方式访问服务实例。
弹性和容错:分布式服务通过网络互联,网络可能会不稳定,服务实例有可能延迟,出错或者宕机,微服务系统必须具备弹性和容错的能力。
API管理:微服务对外暴露API,一般通过API网关进行管理,网关是微服务的大门,需要支持反向路由,安全鉴权,日志监控,限流容错等基本功能,还有蓝绿,灰度测试等高级功能。
服务安全:认证,鉴权,微服务之间调用也需要权限管控。
日志监控:服务访问日志需要集中采集,存储和分析,方便后续分析微服务性能
Metrics监控:对服务的监控需要进行埋点监控,既可以对服务性能进行监控e.g.调用链,延迟,错误数;也可以对业务指标进行监控e.g.登录数,下单数。
调用链监控:微服务之间的调用错综复杂,通过微服务调用链监控可以实时
调度和发布:微服务最终是要发布到生产环境当中去的,目前推荐的微服务交付手段主要是容器云环境,需要支持自动的容器资源调度和发布
自愈和自动伸缩:微服务需要有自动侦测和自动回复的能力;用户流量可能会变化,所以微服务架构需要支持自动伸缩。
Dubbo, Spring cloud, 和 K8s的横向对比
1)ZK:Zookeeper
2)ELK和EFK的对比
3)Zipkin可以看一下
这3个平台都有大型项目落地的案例,在选型时关键就是看这些公共关注点,和平台的优缺点。如果用k8s的话,小项目不建议创建集群的私有云,可以委托给云服务平台(公有云)去管理。(可以看一下AWS或阿里云对k8s的支持是什么样的)
中台架构
中台是大型项目抽象出来的概念,在大型项目发展到一定规模之后就会出现一定的层级结构。可以通过几个平台的中台架构来理解:
From eBay
From alibaba
From 拍拍贷
_________________________________________________________________________________________________
cover了课程第一章和第二章的内容