36 | 微服务架构最佳实践 - 基础设施篇
36 | 微服务架构最佳实践 - 基础设施篇
讲述:黄洲君
时长12:33大小5.74M
自动化测试
自动化部署
配置中心
接口框架
API 网关
服务发现
服务路由
服务容错
服务监控
服务跟踪
服务安全
小结
赞 19
提建议
精选留言(61)
- 孙振超2018-09-18文章中一共列了11个部分,但只有10个人,很明显是不可能是同时开工的,即使能够同时开工也是需要经过几轮迭代才能达到一个比较完善的状态。 依据简单原则和演化原则以及“三个火枪手”的人员分配原则,首先可以做API 网关、配置中心、服务发现、服务路由这4部分,经过一个月的开发+半个月的联调的先让基础框架搭建起来,业务能够运行起来。 业务上线后,为了保证用户体验和问题跟踪,在保留一两个留守同学的情况下,开始服务容错、服务监控、服务跟踪这几部分的开发,因为这个阶段中可能还要回头修改已完成的部分让这几个部分配合的更好,联调的工作量也多了不少,这个过程大概要2.5月。 而后随着业务逐渐增多,流量逐渐增加,为避免被黑产“薅羊毛”需要把服务安全部分给完成,同时为了快速响应新的业务需要把接口框架给完成,但此时有些同学会被已完成部分的日常维护、修bug等,这些初步需要两个月时间。 在这里都完成后,可以开始自动化测试、自动化部署这部分,也按照两个月的时间,这样一轮下来总体需要8个月时间。 经过第一轮后微服务的基础实施是有了,但要真正的运作起来还需要经过几轮的迭代才可以,但此时面对老系统的维护新系统的开发整体的进度会变慢不少,这样一个合格的比较完善的微服务基础设施差不多要两年时间了。展开
作者回复: 你是第一个认真分析且抓住重点的同学👍👍
共 10 条评论218 - Coder42018-07-19看怎么定义自研了,今年花了1个月,每天半小时代码。半开源,半代码,已经实现了 服务发现,追踪,自动部署,以及后端服务数据库,消息队列,缓存,内存数据库的对接, 真正熟悉了,花不了太多时间,另外得合理利用轮子。
作者回复: 你这个太牛了,惊为天人啊😄
58 - 无痕2018-07-20老师,很多人把oauth2的鉴权放到了网关,这个你怎么看
作者回复: 不符合网关的定位,因为有的业务要鉴权有的不要,放在网关就相当于网关要和业务耦合了
共 5 条评论19 - 程启2018-08-12华仔老师, 之前看您留言提到过service mesh不成熟,中小公司不建议使用。请问看起来最近gcp云平台,主推的k8s加上Istio/envoy实现服务治理,您认为未来方向如何,这个是试用中小型团队的方案吗?感谢解答!
作者回复: 我没有service mesh具体实践经验,主要信息来源于网上资料,意见供参考。 1. Istio刚发布1.0版本,spring cloud成熟很多 2. service mesh中文为服务网格,很形象,说明了更加适合非常多的服务节点,简单来说,如果你只有一两个服务没必要用微服务架构,你只有几十个微服务节点可能也不需要service mesh 3. service mesh对程序无侵入,这点非常好,但随着spring cloud之类的方案成熟,侵入问题其实不是主要问题 因此,我认为大部分中小公司目前不需要service mesh,能把微服务做好已经很不错了。
17 - 成功2018-07-2730天左右
作者回复: 太乐观,30天就算用spring全家桶,都不可能上线的
共 3 条评论13 - 每天学英语的小沈2019-01-09微服务这两章讲的非常好,解决了长久以来的困惑
作者回复: 都是实战经验总结
8 - 易燃易爆炸2018-11-29自己写的话肯定坑太多,也没有经过太多实践上的检验。感觉真正稳定下来需要躺过很多坑才行,当然成长也是成倍的,最终苦了公司,系统天天挂。8
- kyll2018-07-19按照我们公司的情况来说,1.5个人,spring全家桶,花费6个月,才让系统上线。 要是完全自研,10个高程在,也信心不大。8
- 空档滑行2018-07-19工作量需要看这一套框架要应对的服务规模和流量。以100个微服务,接口平均qps100以下做了简单测算,不考虑同城和异地多活,达到基本可用的话 配置中心,包括配置项管理和推送,和微服务一起打包的客户端 接口框架,使用http和Json的话,只需要一种语言的解析包 Api网关,后端服务对接和接入层实现 服务发现,使用自理式,注册中心服务端加客户端,加注册中心高可用 服务路由,相对简单 服务容错,包括熔断和流控等 服务监控,包括采集和分析 跟踪,各端trace注入,数据上传,数据查询和计算 安全,权限控制,配置支持 按10个高级开发,3人一组的话,大概半年左右展开
作者回复: 半年只能出最简单的版本,不完善
4 - 依乐祝2019-01-03看了这么久第一次留言,老师你好,刚看你说网关层不建议做鉴权!但是如果这样的话,那内部微服务之间如何进行通信呢?我的理解是网关做与url有关的权限处理!而具体的业务服务里面做与数据相关的权限鉴别!这样职业分开!然后内部进行通信的话就可以采用rpc进行高效的交互,而且都是可信的!不知道我的理解是否有误,还请老师指正下哈
作者回复: 这样是可以的,网关鉴权仅限于和用户相关的登录态,登录环境等,业务权限还是要业务做
3 - Han2020-07-18您说的自研微服务基础设施,该不会是自己从零开始造全部轮子吧? 不太符合现实,也没几家公司会这样操作吧? 有这么多现成的微服务框架工具,大多数人都是直接拿来用。🌝
作者回复: 大公司都是自己做😂
共 2 条评论2 - Geek_steven_wang2020-01-05华哥,你好!请问:服务间的安全策略通过配置中心下发给各节点,一般采用那些安全策略?我了解到的有黑白名单(根据服务名、IP),这个方案比较容易伪造(服务名和IP),还有其它策略吗?
作者回复: 内部网络需要与外部隔离,因此内部反而一般黑白名单用的少,因为机器会经常变,黑白名单管理比较麻烦;通常是给每个服务分配服务名称+服务访问密码之类的做法
3 - 水云波2019-06-11老师,你说API网关的主要包括接入鉴权、权限控制,然后在留言中又说不应该把oauth2的鉴权放到网关。我觉得前后矛盾了,是我对鉴权和权限控制哪里理解的还不到位吗?
作者回复: oauth2是第三方授权,API网关是二方授权,二方是公司内不同业务部门的请求方和调用方,第三方授权是外部系统,内部系统,用户这三方
3 - 吴小智2019-04-11老师讲到很好,不过由于自己还是在校生,没经历过,只能得到感性的认识,谢谢老师2
- mayer2018-07-19这10个人分别有相关经验的话,不考虑复杂的业务逻辑实现调试,整个框架搭起来可应用,应该在3个月左右可以完成,条件是高级工程师真的高级,哈哈😄
作者回复: 太乐观了😄
2 - Kyle2018-07-19Dubbo弄了这么久,配套的基础设施都还没有。高级的水平也有高有低。总觉得怎么也要个一年半载吧。
作者回复: 一年可以,半载不行😄
3 - 2021-08-27服务发现还有这种ServiceMesh
作者回复: 专栏成文是2018年,那个时候service mesh刚出来
1 - 大叶枫2021-08-11API网关:外部系统访问接口和协议、包含接入鉴权、权限控制、传输加密、请求路由、路由控制。 配置中心:包含配置版本管理、增删改查配置、节点管理、配置同步、配置推送。 服务发现:自动化注册和发现服务,提升节点自动化运维能力。 服务路由:一般集成到服务发现里实现路由算法,常见的有随机路由、轮训路由、最小压力路由、最小连接数路由。 服务容错:包括请求重试、流控和服务隔离,一般服务容错会集成到服务发现和服务路由系统中。 服务监控:宏观实时采集信息并分析,故障预警能力,一般作为独立系统建设。 服务跟踪:微观实时采集记录服务调用的链路信息,记录完整的服务链路路径,后置定位使用。 服务安全:分接入、数据、传输三个部分,一般集成到配置中心实现安全策略。 自动化测试:代码级单元测试、单系统级集成测试、系统间的接口测试等自动化测试。 自动化部署:包含微服务版本管理、资源管理(机器、虚拟机)、部署操作、回退操作等功能 故建设优先级,先做业务运行的基础建设、后做业务运行的体验建设、再做业务可持续维护的建设分三个阶段。 业务运行的基础建设(2个月):完成配置中心、服务发现和路由建设,投入兵力6个人,相互主备,剩余四个人做API网关在细分投入。 业务运行的体验建设(4个月):服务容错(2人)、监控(2人)、跟踪(2人)、安全(1人),除了监控外,其他三者集成到已建设的服务发现(1人)。维护老系统(1~2人) 业务可持续维护建设(6个月):自动化测试、自动化部署。以DevOps相关的配套工具围绕测试和部署体系建设。已建设的8块内容投入4个人做维护运转,增量业务支持投入2人。剩余4人做自动化测试和部署。 大概我会这么安排。。展开
作者回复: 节奏和步骤没问题,投入的人有点乐观,这类基础设施做到稳定的话,细节很多。
2 - 艺超(鲁鸣)2020-11-23一直有一个疑问,就是对于web页面的某个功能,可能同时需要几个微服务一起完成,为了避免网络传输,会合为一个接口;目前看有两个方案,1:由其中一个微服务统一完成,然后注册到网关给web使用;2:由网关负责完成,也就是类似BFF这种吧,老师有什么好的建议吗?
作者回复: 网关上用插件比较好,例如Nginx的Lua脚本,或者加个Node.js专门做聚合接口,然后提供给网关
1 - 谭方敏2020-03-12自动化测试(代码级单元测试,单个系统级系统测试,接口间接口测试) 自动化部署(版本管理,资源管理(机器管理,虚拟机管理),部署操作,回退操作) 配置中心(配置版本管理,节点管理,配置同步,配置推送,增删查改操作) 服务监控(宏观,考察请求次数,响应平均时间,响应最高值,减少故障处理时间,针对故障提前预警) 服务跟踪(微观,某次请求的发起请求记录,响应时间,响应错误码,请求参数等) 服务安全(接入安全,数据安全,传输安全) 接口框架(对外用http/json方式,对内用rpc方式) api网关(唯一提供外部访问的,接入鉴权(是否接入),权限控制(是否能访问),流量控制,请求路由,传输加密) 服务发现(自主式(每个微服务之间自己完成服务发现),代理式(每个微服务之间借助负载均衡系统完成服务发现)) 服务路由(随机,轮询,最小压力,最小连接) 服务容错(请求重试,流式和服务隔离) 根据简单和演化原则,自研项目可以从最简单的开始,比如从服务发现,服务路由,服务容错,以及接口框架和api网关出发,等迭代完毕后再跟进自动化测试,自动化部署,配置中心,服务监控,服务跟踪,服务安全,按照逐步迭代,不断演化的思路。至于预测时间,真不好预测,之前做一个基于旧业务的新框架翻新,前前后后花了半年多才出雏形,后面再花半年才稳定下来。还不包括踩坑什么的。展开
作者回复: 差不多,半年落地,半年稳定
共 2 条评论1