技术开发者应该如何构建小团队的微服务方案?
要不要微服务
相比于单体应用,每个服务的复杂度会下降,特别是数据层面(数据表关系)更清晰,不会一个应用上百张表,新员工上手快;
对于稳定的核心业务可以单独成为一个服务,降低该服务的发布频率,也减少测试人员压力;
可以将不同密集型的服务搭配着放到物理机上,或者单独对某个服务进行扩容,实现硬件资源的充分利用;
部署灵活,在私有化项目中,如果客户有不需要的业务,那么对应的微服务就不需要部署,节省硬件成本,就像上文提到的乐高积木理念。
一旦设计不合理,交叉调用,相互依赖频繁,就会出现牵一发动全身的局面。想象单个应用内service层依赖复杂的场面就明白了;
项目多了,轮子需求也会变多,需要有人专注公共代码的开发;
开发过程的质量需要通过持续集成(CI)严格把控,提高自动化测试的比例,因为往往一个接口改动会涉及多个项目,光靠人工测试很难覆盖所有情况;
发布过程会变得复杂,因为微服务要发挥全部能力需要容器化的加持,容器编排就是最大的挑战;
线上运维,当系统出现问题需要快速定位到某个机器节点或具体服务,监控和链路日志分析都必不可少。
开发过程的挑战
通过CI将开发过程规范化,串联自动化测试和人工Review;
我们使用Gerrit作为代码&分支管理工具,在流程管理上遵循Gitlab的工作流模型;
开发人员提交代码至Gerrit的magic分支;
代码Review人员Review代码并给出评分;
对应Repo的Jenkins job监听分支上的变动,触发Build job。经过IT和Sonar的静态代码检查给出评分;
Review和Verify皆通过之后,相应Repo的负责人将代码merge到真实分支上若有一项不通过,代码修改后重复过程;
Gerrit将代码实时同步备份至的两个远程仓库中。
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
测试过程的http client推荐使用io.rest-assured:rest-assured支持JsonPath,十分好用。
schema由flyway处理,在启用测试环境前先删除所有表,再进行表的创建;
测试数据可以通过@Sql读取一个sql文件进行创建,在一个用例结束后再清除这些数据。
测试人员在本地调试测试代码并提交至Gerrit;
Jenkins进行测试运行时环境的镜像制作,主要将引用的各种组件和库打包进一个Python的基础镜像;
通过Jenkins定时或手动触发,调用环境部署的job将专用的自动化测试环境更新,然后拉取自动化测试代码启动一次性的自动化测试运行时环境的Docker容器,将代码和测试报告的路径镜像至容器内;
自动化测试过程将在容器内进行;
测试完成之后,不必手动清理产生的各种多余内容,直接在Jenkins上查看发布出来的测试结果与趋势。
测试人员在本地调试测试代码并提交至Gerrit;
通过Jenkins定时或手动触发,调用环境部署的job将专用的性能测试环境更新以及可能的Mock Server更新;
拉取最新的性能测试代码,通过Jenkins的性能测试插件来调用测试脚本;
测试完成之后,直接在Jenkins上查看通过插件发布出来的测试结果与趋势。
发布过程的挑战
oc run upgrade-foo --image=upgrade/production --replicas=1 --restart=OnFailure --command -- java -jar -Dprofile=production /app/upgrade-foo.jar
脚本升级任务也集成在jenkins中。
readinessProbe:failureThreshold: 4httpGet:path: /actuator/metricsport: 8090scheme: HTTPinitialDelaySeconds: 60periodSeconds: 15successThreshold: 2timeoutSeconds: 2
线上运维的挑战
【END】
让你成为Python全栈工程师:
https://edu.csdn.net/topic/python115?utm_source=csdn_bw
热 文 推 荐
☞
☞
技术开发者应该如何构建小团队的微服务方案?相关推荐
- java 拉起服务_技术开发者应该如何构建小团队的微服务方案?
作者 | 徐鹏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 我们的产品是Linkflow,企业运营人员使用的客户数据平台(CDP).产品的一个重要部分类似企业版的"捷径&q ...
- repo打了 tag之后如何提交tag_技术开发者应该如何构建小团队的微服务方案?
作者 | 徐鹏责编 | 刘静出品 | CSDN(ID:CSDNnews) 我们的产品是Linkflow,企业运营人员使用的客户数据平台(CDP).产品的一个重要部分类似企业版的"捷径&quo ...
- 技术开发者该如何开展小团队的微服务之路?
作者 | 王鼎 责编 | 刘静 微服务是否适合小团队是个见仁见智的问题.回归现象看本质,随着业务复杂度的提高,单体应用越来越庞大,就好像一个类的代码行越来越多,分而治之,切成多个类应该是更好的解决方法 ...
- 技术丨小团队的微服务之路
Linkflow首席架构师 – 王鼎 作者简介:11年软件研发经验,6年SaaS(基于公有云或私有云),熟悉ERP, CDP, omin渠道销售解决方案.参与SaaS产品的大型开发,成员400余人.在 ...
- 资深架构专家聊小团队中微服务困境及分布式事务解决方案
自微服务的概念被提出,距今已经7年之久,微服务也被很多企业争相追捧,不管是最早的亚马逊.Netflix还是我们每天都要用一用的淘宝. 但我仍然要说,过早的优化无异于一场灾难,特别对于小团队而言. 你的 ...
- Uber 团队放弃微服务改用宏服务,网友评论炸锅了
作者 | highscalability 对于微服务,大多数开发者的态度都是鲜明的,要么热爱,要么痛恨,很少有人怀抱着比较"暧昧"的态度.所以,当 Uber 中的一个技术团队宣布, ...
- 技术分享|“单身”还是“入微”?一起聊聊微服务的二三事
云原生技术分享系列内容第三篇之--微服务架构篇. 感兴趣的朋友也可以去看行云创新关于云原生技术介绍的其它文章: <关于容器最通俗的解释,人人都能三分钟搞懂> <技术分享|关于K8S的 ...
- go设置后端启动_今日头条内涵段子使用Go语言构建千亿级微服务架构实践
今日头条从内涵段子开始,从日均千万,到亿万,再到百亿级,再到千亿级流量,头条APP不断进化,成为一个TMD小巨头之一.本篇文章讲述头条架构的微服务变迁史. 今日头条在2015年中期前,使用的开发语言大 ...
- (转)今日头条内涵段子使用Go语言构建千亿级微服务架构实践
今日头条在2015年中期前,使用的开发语言大量采用了Python和C++以及PHP技术栈. 随着系统复杂度,耦合度不断提升,开始向SOA服务化架构演进. 头条的内容发布系统使用了Django框架,一部 ...
最新文章
- ARM的位置无关程序设计在Bootloader中的应用
- 这些密码千万不要用!黑客5分钟即可破解!
- 前端 html结合css-1篇
- sql for循环_【赵强老师】什么是PL/SQL?
- python flask request 参数映射_Flask request获取参数问题
- numpy和pandas的参考手册
- java盖章后原来印章模糊了_公章部分字迹盖不清楚怎么处理
- 机器学习8-误差逆传播算法BP的认识
- 直击14号台风“灿都”最新消息!浙江多地停课停运,上海严阵以待!
- 第一个爬图片的程序(xkcd.com)
- ZYNQ入门,EBAZ4205开发平台从头开始搭建
- 网游活动策划经验指南
- Excel怎么快速提取出网址
- 立方体在三维坐标中的旋转(3D,Spining)
- 关于Django字段类型中 blank和null的区别
- php生成cmyk图片,用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!...
- 取消参考文献自动编号_Word2016写论文之尾注功能——参考文献自动编号与引用(包括方括号去除方法)...
- 数学软件四大家族—MATLAB、MathCAD、Maple 和 Mathematica 优缺点比较
- 一体压铸深度,高效率、低成本轻量化的汽车制造革命
- 世界标准时间yyyy-MM-dd‘T‘HH:mm:ss.SSSXXX详解
热门文章
- 对动画队列的初步了解
- HDU.1006 Tick and Tick
- 关于主函数main(int argc,char *argv[])
- Sublime text3 更改侧边栏颜色
- 对运算符重载的函数1
- vscode+leetcode环境配置
- c语言编写的商品管理程序,C语言编写的商品管理系统
- keyshot环境素材文件_超赞|15个不翻墙免费可商用矢量素材下载网站推荐
- [SQL实战]之获取所有部门中当前员工薪水最高的相关信息
- 剑指offer之统计数组中出现次数超过一半的数字