创业公司自动化上线的架构设计

简介: 创业公司自动化上线的架构设计

导语:

晚上听了58沈剑老师的自动化上线的课程的一些分享,记录下笔记和一些思考,这要是讲了从创业公司的手动发布到自动化发布的架构和设计。

1.起源

问题的提出:如何把新系统发布到线上?

不同公司的阶段有着不同的策略和方式如下图:

对于创业公公司来说对于研发工程师往往是多面手,很多时候部署就是自己操作的。
发布代码非常繁琐和麻烦,工程师会花费大量的时间在这些重复性的劳动上面。这里就是问题的所在,
应该解放工程师去做更多有意义的事情,从重复性劳动中解脱出来。

2.创业公司会遇到的困难

困难如下图:

创业公司可能技术栈比较单一,语言这方面不会太多,但是沈老师说的领导不重视这一点倒是很有可能发生。
上头只看结果,不在意系统发布怎么快怎么优化,这时候应该负责任把方案拿出来,说可以用很少的时间,很大的提高
研发的开发效率,这个时候可能才会比较容易争取到上司的同意和资源协调。
具体可以列举的理由(自动化发布要实现的功能):
1.解决大部分需求
2.支持多语言
3.支持多类型上线:web,service
4.支持多框架上线
5.可以定制化
6.能够快速落地

3.自动化上线实践

3.1 抽象集群:
前提需要抽象集群,集群是保证高可用的基础

3.2 集群信息:
例如:一个用户服务集群有哪些信息?

属性 作用
集群名称:user.service 唯一标识,上下游调用
ip列表:ip1,ip2,ip3 上下游调用
二进制目录:/user.service/bin 自动化备份&发布
配置目录:/user.service/conf 自动化备份&发布
日志目录:/user.service/log 自动化日志备份&清理
负责人列表:shenjian,zhangsan,lisi 报错后发送信息告知到责任人

3.2.1 集群信息的作用
a.上下游调用:
举例:web-X调用user.service会用到哪些信息?
上下游调用会用到的集群信息:
service.name:user.service
service.ip.list:ip1,ip2,ip3
service.port:8080
(这些信息保存在web-X.config)

上下游调用过程:
web-X启动
web-X读取服务器ip列表和端口
web-X初始化服务连接池
web-X拿取连接,进行rpc接口调用

b.自动备份二进制文件
举例:自动化备份会用到哪些信息?
自动化备份会用到的集群信息:
service.name:user.service
service.ip.list:ip1,ip2,ip3
bin.path: /user.service/bin
(这些信息保存在backup.user.service.config)

自动化备份的过程:
1.依次轮询每个ip
2.建立相关备份目录
3.把二进制复制到备份目录下

3.2.2 集群信息的维护
集群信息的维护分为两种,分散式和集中式。如图:

集中式集群配置,是自动化上线的基石。
集中式发展:全局的配置文件->配置服务->配置中心

4.抽象自动化上线过程

过程抽象如图:

每个集群增加一个cluster.type集群类型,用来标识集群是干嘛的。
比如分三级cluster.type=Java.web.SpringMVC
第一级是标识语言种类
第二级是标识是web还是service的类型
第三级是标识使用的是什么框架(不同的框架发布方式不一样 )

4.1 集群自动初始化化举例

Java.web.Spring: 部署tomcat,部署相关库,建立规范的目录结构
Java.service.dubbo: 部署容器,部署相关库,建立规范的目录结构
C++.service.sofa: 部署相关库,建立规范目录结构
PHP.web.zend:...

综上所述,每个集群的类型有着固定的初始化过程。

4.2 规范目录结构
规范目录结构很重要,只有规范好固定的结构,才能写对应的脚本去做出相应的处理。
如图:

4.3 日志规范
日志规范是日志自动化监控/备份/清理的基础
如图:

4.4 集群的构建+打包自动化举例

PHP:copy+tar相关代码
Java:Maven
C++:Make

4.5 集群发布自动化举例
以java.web.DWF,如图:

4.6 回顾整个流程
如图:

4.7 自动化到平台化
如图:

5.架构思路和总结

架构思路:

**1.中心化管理:保证数据一致
2.抽象:提供共性的地方,尽量通用
3.分解:整理很复杂,分支很简单
4.可扩展:通过service_type保持个性可扩展**

总结:

**1.架构设计,讲究抽象,将复杂的问题透析成简单的问题
2.统一规范很重要,只有大家都统一了规范(日志规范,代码规范,目录规范...),才能做更多的事情,比如就像今天说的自动化发布,如果不规范统一,
就很难自动化,因为个性的东西太多了没法用通用的手段去处理。
3.实现步骤要一步步来,人肉->自动化->平台化,不是一蹴而就的,要对应公司目前的发展一步步来,找到最适合自己公司业务发展的方式。**

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
存储 人工智能 架构师
ChatGPT 与软件架构 (2) - 基于 Obsidian 和 GPT 实现解决方案架构自动化
ChatGPT 与软件架构 (2) - 基于 Obsidian 和 GPT 实现解决方案架构自动化
144 0
|
25天前
|
运维 监控 Devops
构建高效稳定的云基础设施:DevOps与自动化运维的融合构建高效微服务架构的最佳实践
【5月更文挑战第28天】 在数字化转型的浪潮中,企业对于云基础设施的依赖日益增加。为了应对不断变化的市场需求和提供不间断的服务,传统的IT运维模式已不再适应现代业务的发展。本文将探讨如何通过结合DevOps理念和自动化工具,实现云基础设施的高效稳定运营。我们将分析自动化运维在提升效率、降低成本以及增强系统稳定性方面的关键作用,并展示实践案例以验证其效果。
|
28天前
|
运维 Cloud Native 持续交付
云原生架构的未来演进:打造更加动态和自动化的基础设施
【5月更文挑战第25天】 随着企业数字化转型的深入,云原生技术以其独特的弹性、敏捷性和自动化能力成为支撑现代应用的关键。本文将探讨云原生架构的最新发展趋势,重点分析其在提高运维效率、促进资源优化配置以及支持复杂业务场景中的作用。文章还将讨论如何通过持续集成、持续部署(CI/CD)流程,微服务架构和容器化技术,实现基础设施的自愈能力,从而推动企业向完全自动化的云原生未来迈进。
|
25天前
|
人工智能 算法 测试技术
探索软件自动化测试的未来:AI驱动的测试策略构建高效可靠的微服务架构:后端开发的新范式
【5月更文挑战第28天】 在软件开发的世界中,测试是确保产品质量的关键步骤。随着技术的进步和项目复杂性的增加,传统的手动测试方法逐渐显得力不从心。本文旨在探讨自动化测试的最新趋势——人工智能(AI)驱动的测试策略。我们将分析AI如何通过智能化的测试用例生成、测试执行优化以及结果分析来提高测试效率和精确性。文章还将讨论实施AI测试策略的挑战与机遇,为软件测试工程师提供未来技术转型的视角。 【5月更文挑战第28天】 在当今软件开发的快速迭代和复杂多变的环境中,传统的单体应用架构已经难以满足业务敏捷性和可扩展性的需求。微服务架构作为一种新的解决方案,以其服务的细粒度、独立部署和弹性伸缩等特性,正逐
|
26天前
|
Java 测试技术 持续交付
Java中的异常处理机制探索自动化测试在微服务架构中的实践与挑战
【5月更文挑战第27天】本文将深入探讨Java中的异常处理机制,包括异常的概念、分类以及如何使用try-catch-finally语句进行异常处理。文章还将介绍自定义异常的方法以及在实际开发中如何选择合适的异常处理策略。 【5月更文挑战第27天】 随着软件开发领域向微服务架构的转型,传统的软件测试方法面临诸多挑战。本文旨在探讨自动化测试在微服务环境下的应用实践及所面临的问题。我们将从微服务的特性出发,分析自动化测试的必要性,并深入讨论如何构建一个高效、鲁棒的自动化测试框架。文章还将介绍一系列创新的测试策略和工具选择,以及如何克服微服务带来的分布式复杂性。最后,通过案例研究,展示自动化测试在实
|
1月前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
|
9月前
|
架构师 测试技术 API
深入浅出聊一聊自动化架构!
深入浅出聊一聊自动化架构!
130 1
|
10月前
|
敏捷开发 架构师 Java
GitHub上线重量级分布式架构原理设计笔记,开源的东西看着就是爽
在分布式系统中,一次业务处理可能需要多个应用来实现,比如用户发送一次下单请求,就涉及到订单系统创建订单,库存系统减库存,而对于一次下单,订单创建与减库存应该是要同时成功或者同时失效,但在分布式系统中,如果不做处理,就很有可能订单创建成功,但是减库存失败,那么解决这类问题,就需要用到分布式事务……
|
6月前
|
机器学习/深度学习 存储 JSON
Azure - 机器学习:使用自动化机器学习训练计算机视觉模型的数据架构
Azure - 机器学习:使用自动化机器学习训练计算机视觉模型的数据架构
37 0
|
8月前
|
Kubernetes 监控 jenkins
基于K8S实现代码自动化上线
基于K8S实现代码自动化上线

热门文章

最新文章