来自:DBAplus社群

作者介绍

李博文,新炬网络高级工程师。精通JAVA开发和运维,开发过运营商系统,物联网系统,电网系统,燃气系统,高校系统等大型系统,拥有ITSS服务经理,项目管理师,架构师等认证,拥有丰富的开发经验,擅长软件开发与运维。

天下大势,分久必合,合久必分。

——《三国演义》第一回

越简单越稳定,越高级越脆弱,递弱代偿。

——《物演通论》王东岳

软件项目最初没有的运维部门

大概12年前,最初进入软件开发领域,那时一个人需要学很多的开发技能和运维技能,上能后端做服务,下能前端写页面,左能做DBA,右能做架构,中间还能运维。

那时开发和运维其实没有界限,基本都是一体的,当然也有可能因为公司规模不是特别大,所以分工也没有那么细,也听说过专门有运维部门的公司,但是那时软件运维人员的水平也只能做重复性的工作。硬件和网络运维这里不讲,而那种比较贵的DBA,中小公司一般不会请,所以基本上开发≈运维。软件生命周期中最长的部分在运维阶段,在那个时候开发是要负责整个生命周期的。

那个时候架构很简单,有的应用程序、数据库、文件都部署在一台服务器上:

或者是分开部署,将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果:

数据库的选择一般情况下有三个:大、中型系统使用Oracle或者MSSQL,毕竟会有厂商进行支持,DBA的质量也比较高。小型系统一般使用MySQL,使用的好坏基本依赖开发人员对MySQL的熟悉程度。然而到了今天,会有专业的人在做开源或者非开源数据库的维护,数据库市场也迎来了百花齐放的春天。

随着业务扩展开始出现分工

当越来越多的人开始使用软件系统,开发的工作日渐繁忙,多数时候在忙着写代码和做项目,运维的工作很多时候无法抽身。这个时候会将几个之前开发系统的程序员组成一个新的组织,这个就是软件运维部门的雏形,他们为了解决一些性能上的问题,可能改变系统架构与部署,比如加入缓存:

在大部分系统中,都会利用缓存技术改善系统的性能,使用缓存主要源于热点数据的存在,大部分访问都遵循28原则(即80%的访问请求,最终落在20%的数据上),所以我们可以对热点数据进行缓存,减少这些数据的访问路径,提高用户体验。

缓存实现常见的方式是本地缓存、分布式缓存。本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,OSCache就是常用的本地缓存组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在软件系统中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Memcached、Redis。

当然在用户量继续增长的情况下,应用服务器作为系统的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点这时:

常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx是七层负载均衡和HAProxy支持四层、七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。

随着用户量继续增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中:

业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。常用的分布式文件系统有NFS:

由于项目数据量持续增加,数据库的压力会越来越大,并且传统关系型数据无法处理海量数据。这时需要分离数据存储,对于海量数据的查询和分析,我们使用NOSQL数据库和大数据技术再加上搜索引擎可以达到更好的性能。常用的NOSQL数据库有MongoDB、HBase(依赖Hadoop大数据)、Redis,搜索引擎有Lucene、Solr、Elasticsearch等:

单独软件运维部门

当越来越多的开源或者非开源技术加入到项目中,项目成员也会变得越来越多,开始各司其职对现在使用的各种软件进行运行维护和实施部署。

一个项目的具体实施并不是编写一个应用程序那么简单,还涉及到为应用程序提供支撑的其他软件,这为单独成立软件运维部门提供了条件。

项目运行时间长了以后,会因为技术落后或者性能瓶颈而进行重构,软件运维部门会和开发部门合作,对项目架构进行重构,一般情况下开发会拆分业务,形成分布式应用程序,而应用拆分成分布式,可以使用阿里的Dubbo或者SpringCloud搭建服务:

为了实现分布式系统,这里需要用到消息队列,消息队列的主要作用有3个:解耦、异步、削峰。消息队列可以选择:RabbitMQ、ZeroMQ 、ActiveMQ 、Kafka。

软件运维部门和开发部门融合

随着技术的发展,近几年自动化运维,自动化部署,自动化测试的兴起,特别是DevOps概念的提出,运维部门和开发部门融合的趋势越来越明显。又开始了开发即是运维的轮回,但这次不同的是,机器替代了人肉运维。

DevOps 就是开发(Development)和运维(Operations)这两个领域的合并,那么,为什么要合并这两个领域?原因很多,但首要原因是:目前的两个领域工作流程是脱节的。绝对的脱节。很多公司的开发部门和运维部门之间存在的深刻矛盾,其实就是这个“脱节”造成的。

为了解决“脱节”问题,需要使用到很多自动化工具,以及自动化维护平台。于是架构进一步升级:

持续开发

与瀑布模型不同的是,软件可交付成果被分解为短开发周期的多个任务节点,在很短的时间内开发并交付。

这个阶段包括编码和构建阶段,并使用Git和SVN等工具来维护不同版本的代码,以及Ant、Maven、Gradle等工具来构建/打包代码到可执行文件中,这些文件可以转发给自动化测试系统进行测试。

持续测试

在这个阶段,开发的软件将被持续地测试bug。对于持续测试,使用自动化测试工具,如Selenium、TestNG、JUnit等。这些工具允许质量管理系统完全并行地测试多个代码库,以确保功能中没有缺陷。在这个阶段,使用Docker容器实时模拟“测试环境”也是首选。一旦代码测试通过,它就会不断地与现有代码集成。

持续集成

这是支持新功能的代码与现有代码集成的阶段。由于软件在不断地开发,更新后的代码需要不断地集成,并顺利地与系统集成,以反映对最终用户的需求更改。更改后的代码,还应该确保运行时环境中没有错误,允许我们测试更改并检查它如何与其他更改发生反应。

Jenkins是一个非常流行的用于持续集成的工具。使用Jenkins,可以从Git存储库提取最新的代码修订,并生成一个构建,最终可以部署到测试或生产服务器。可以将其设置为在Git存储库中发生更改时自动触发新构建,也可以在单击按钮时手动触发。

持续部署

它是将代码部署到生产环境的阶段。在这里,我们确保在所有服务器上正确部署代码。如果添加了任何功能或引入了新功能,那么应该准备好迎接更多的网站流量。因此,系统运维人员还有责任扩展服务器以容纳更多用户。

由于新代码是连续部署的,因此配置管理工具可以快速,频繁地执行任务。Puppet,Chef,SaltStack和Ansible是这个阶段使用的一些流行工具。

容器化工具在部署阶段也发挥着重要作用。Docker和Kubernetes是流行的工具,有助于在开发,测试,登台和生产环境中实现一致性。除此之外,它们还有助于轻松扩展和缩小实例。

持续监控

通过监控软件的性能来提高软件的质量。这种做法涉及运营团队的参与,他们将监视用户活动中的错误/系统的任何不正当行为。这也可以通过使用专用监控工具来实现,该工具将持续监控应用程序性能并突出问题。

使用的一些流行工具是Splunk、ELK Stack、Nagios、NewRelic和Sensu。这些工具可帮助密切监视应用程序和服务器,以主动检查系统的运行状况。它们还可以提高生产率并提高系统的可靠性,从而降低IT支持成本。发现的任何重大问题都可以向开发团队报告,以便可以在持续开发阶段进行修复。

小结

软件架构不是一蹴而就的,系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。

这就像物种的演变,从简单到复杂,但是越是复杂的生物,要生存所付出的代价也会越多。反而简单的生物存活的更久更好更成功,这就是递弱代偿。

系统架构越来越复杂,确实能应付很多情况,但付出的运维成本也会越来越大,于是又开始将分工出去的运维部分融合,也许过一段时间,又会出现新的分工,谁知道呢?

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

从软件架构演变看运维的分工与融合相关推荐

  1. 报表选型除了看开发难易,还要看运维省不省心

    俗话说,报表运维是个坑,有时候被客户坑,有时候被同事坑,有时候被自己坑,坑来坑去还得自己填坑. 比如说,企业大了,业务种类就多了,这时候就不能依靠手工统计报表,企业就会采购或者开发报表系统,然而在选型 ...

  2. 从携程瘫痪事件看运维的85条军规

    1) 承载能力优先 --随后再进行优化 -- 不遵守这条规则必定带来故障停机时间.不要在故障停机时间的压力下进行优化--要先集中精力提高承载能力. 2) 以Postgres为例,一定要确保你的每一个网 ...

  3. 看运维人员如何“华丽转身”

    IT运维人员问科比:"科比,你为何如此成功?"科比反问:"你知道洛杉矶每天凌晨4点的样子吗?"运维人说:"知道,那个时候我一般还在处理告警没下班呢.你 ...

  4. SDCC 2016架构运维峰会(成都站),讲师议题抢先看!

    为促进更深入的业内同行技术交流,同时传播先进技术理念,2016年8月12日-13日,由CSDN重磅打造的互联网应用架构实战峰会.运维技术与实战峰会将在成都举行. 这是继SDCC 2016架构技术峰会( ...

  5. 从《进化/运维技术变革与实践探索》看运维体系建设与个人成长

    最近在学习赵成大佬的<进化/运维技术变革与实践探索>一书,在极客时间也有教程.整本书从以下的四个方面进行了梳理:应用运维体系建设.效率和稳定性等方面的最佳实践.云计算方面的思考和实践.个人 ...

  6. 腾讯游戏运维服务体系演变史

    在面临高速发展的移动互联网游戏行业,对运维能力的要求变得越来越高,传统运维已经无法适应当下的节奏,如何随着时代演变而进步,如何能在危机中给自己创造机会,抓住要领才能坦然面对万变. 1 运维服务定义 谈 ...

  7. 从一个运维人员的角度看微盟的这次删库跑路的节奏

    从一个运维人员的角度看微盟的这次删库跑路的节奏 这二天,微盟运维人员删库的事件刷屏了,造成的影响特别的大. 回顾整个事件,本人从15年的运维人员的角度来分析一下这个事件: 1. 为什么一个运维人员会有 ...

  8. 【必看】运维是“越老越吃香“的职业?

    运维岗位不像其它岗位,如研发工程师.测试工程师等,有非常明确的职责定位及职业规划,比较有职业认同感与成就感: 而运维工作可能给人的感觉是哪方面都了解一些,但又都比上专职工程师更精通.感觉平时被关注度比 ...

  9. 2019年最新最全运维技能图谱

    作者:南非蚂蚁 来源:https://blog.51cto.com/ixdba 运维是一个融合多学科(网络.系统.开发.安全.应用架构.存储等)的综合性技术岗位,从最初的网络管理(网管)发展到现在的系 ...

  10. 2019运维技能风向标

    运维是一个融合多学科(网络.系统.开发.安全.应用架构.存储等)的综合性技术岗位.从最初的网络管理(网管)发展到现在的系统运维工程师.网络运维工程师.安全运维工程师.运维开发工程师等,可以看出,运维的 ...

最新文章

  1. R包dplyr进行数据清洗和整理
  2. springboot整合vue小试牛刀
  3. JAVA多线程提高十四: 面试题
  4. python中元组可以比较大小吗_python元组比较
  5. smtp中mailfrom是必须的吗_你是住在高层建筑中吗?这是你必须了解的
  6. 黑马程序员C++学习笔记(第三阶段核心:STL)--- 更新中
  7. java LinkedHashMap源码解析
  8. 解决servlet中get方式中中文乱码问题(二):装饰者模式使用
  9. 排查DHCP服务器故障
  10. 【干货分享】制作一款清新的二次元风格字体
  11. html属于编程语言,HTML编程语言
  12. 扩展spring之ext-spring-cache
  13. 劳务派遣经营许可证怎样办理
  14. Kali google 翻译
  15. 索尼相机摄像机断电MP4视频无XML文件数据恢复修复方法
  16. 操作系统 第六章输入输出系统(自我总结式)
  17. 【学习挑战赛】经典算法之折半查找
  18. vivox9android版本升级,vivo X9s是什么系统
  19. matlab中的motion,matlab-ego-motion 基于 实现的自身运动估计仿真程序。通过对视频图 分析,快速 摄像机 的 263万源代码下载- www.pudn.com...
  20. 下一个十年,区块链将如何厚“基”薄发?

热门文章

  1. python图片自动上色_自己实现黑白图片自动上色AI(一)
  2. IDDD 实现领域驱动设计-SOA、REST 和六边形架构
  3. 如何开启windows7快速启动栏(转)
  4. 本机 ip 地址和本地ip地址的区别?
  5. 关于“ VMware Workstation 16 此平台不支持虚拟化的Intel VT-x/EPT. 不使用虚拟化的Intel VT-x/EPT,是否继续?”的有关问题的总结解答
  6. u邮件收件服务器密码是什么,U-Mail邮件服务器加密技术给邮件上安全锁
  7. 分享一段可以直接下载新浪微博视频的小程序
  8. 如何将720P的mp4视频转换成1080P的视频?视频分辨率如何修改?
  9. 数字人枫灵Lynn,获得江苏省文化产业周刊关注!
  10. 大疆DJI 精灵 4 RTK 镜头很暗 ISO