当前位置: 首页 > 科技观察

“杀”运维没那么容易!

时间:2023-03-13 19:46:08 科技观察

天下大势,分久必合,分久必分。——《三国演义》第一轮;越简单越稳定,越高级越脆弱,补偿越弱。——《物演通论》王冬月图片来自Pexels软件项目一开始没有的运维部门。大概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来搭建服务:为了实现分布式系统,这里需要用到消息队列。消息队列主要有解耦、异步、削峰三个功能。消息队列可以选择:RabbitMQ、ZeroMQ、ActiveMQ、Kafka。软件运维部与开发部一体化随着技术的发展,近年来自动化运维、自动化部署、自动化测试的兴起,尤其是DevOps的概念,运维部与开发部一体化的趋势发展部门越来越明显。开发和运维的轮回又开始了,但这一次不同的是,机器代替了人的运维。DevOps是Development和Operations两个领域的合并。那么,为什么要把这两个领域合并呢?原因有很多,但第一个原因是:两个领域目前的工作流程脱节,完全脱节。很多公司的开发部门和运维部门之间的深层矛盾其实就是这种“脱节”造成的。为了解决“脱节”问题,需要使用很多自动化工具和自动化维护平台。于是架构进一步升级:持续开发与瀑布模型的区别在于,软件交付物被分解为多个开发周期短的任务节点,在较短的时间内完成开发和交付。该阶段包括编码和构建阶段,使用Git、SVN等工具维护不同版本的代码,使用Ant、Maven、Gradle等工具将代码构建/打包成可执行文件,可转发到自动化测试系统进行测试测试.持续测试在此阶段,将对开发的软件进行持续的错误测试。对于连续测试,使用自动化测试工具,如Selenium、TestNG、JUnit等。这些工具允许质量管理系统完全并行地测试多个代码库,以确保没有功能缺陷。在此阶段也首选使用Docker容器实时模拟“测试环境”。一旦代码经过测试,它就会与现有代码持续集成。持续集成这是支持新功能的代码与现有代码集成的阶段。随着软件不断开发,更新的代码需要不断集成并与系统平滑集成,以反映最终用户不断变化的需求。更改代码后,还应确保运行时环境没有错误,以便我们测试更改并检查它与其他更改的反应。Jenkins是一个非常流行的持续集成工具。使用Jenkins,最新的代码修订从Git存储库中提取并生成最终可以部署到测试或生产服务器的构建。它可以设置为在Git存储库中发生更改时自动触发新构建,或者在单击按钮时手动触发。持续部署这是将代码部署到生产环境的阶段。在这里,我们确保代码已正确部署在所有服务器上。如果添加了任何功能或引入了新功能,那么您应该准备好迎接更多的网站流量。因此,扩展服务器以容纳更多用户也是系统运营商的责任。由于不断部署新代码,配置管理工具可以快速且频繁地执行任务。Puppet、Chef、SaltStack和Ansible是这个阶段使用的一些流行工具。容器化工具在部署阶段也发挥着重要作用。Docker和Kubernetes是流行的工具,可帮助实现开发、测试、暂存和生产环境之间的一致性。除此之外,它们还有助于轻松扩展和缩减实例。持续监控通过监控软件的性能来提高软件的质量。这种做法涉及运营团队的参与,他们将监控用户活动是否存在错误/系统的任何不当行为。这也可以通过使用专用监控工具来实现,该工具将持续监控应用程序性能并突出显示问题。使用的一些流行工具是Splunk、ELKStack、Nagios、NewRelic和Sensu。这些工具有助于密切监控应用程序和服务器,以主动检查系统的健康状况。它们还可以提高生产力和系统可靠性,从而降低IT支持成本。发现的任何重大问题都可以报告给开发团队,以便在持续开发阶段进行修复。总结软件架构不是一蹴而就的。系统架构在设计之初并没有完全的高性能、高可用性、高扩展性。它随着用户数量的增加和业务功能的扩展而逐渐演进和完善。在这个过程中,开发模式、技术架构、设计思路都发生了很大的变化。甚至技术人员也从几个人发展到一个部门甚至一个产品线。这就像物种的进化,从简单到复杂,但越是复杂的生物,生存的代价就越大。相反,简单的生物生存得更久、更好、更成功,这就是弱补偿。系统架构越来越复杂,确实可以应对很多情况,但是运维成本也会增加,所以本来分出去的运维部分开始整合。也许再过一段时间,就会出现新的分工。谁知道?作者:李博文简介:新居网络高级工程师。精通Java开发和运维,开发过运营商系统、物联网系统、电网系统、燃气系统、高校系统等大型系统,拥有ITSS服务经理、项目经理、架构师等认证,具有丰富的开发经验,擅长软件开发和运维。