与国内某知名互联网公司交流后的心得

  前不久咱们公司和业内一家一流的公司作了一次技术交流,对于他们的监控系统、日志系统、统一配置系统以及部署系统印象深入。深入的缘由是咱们公司这些工做都是徒手操做,跟他们相比简直是大刀对坦克了,交流完后咱们大伙内部也讨论了下,该公司的这些系统咱们这边也是急切须要的,无数生产的问题以及生产效率的问题都是由于监控、日志、配置以及部署所形成的,可是现实是作这些自动化管理的系统须要投入大量人力和物力,并且还要专心致志作相关研究才能将这些系统作完作好,而咱们技术部门如今人力远远不足的时候这样的系统开发对于领导而言是会影响核心业务开发的,领导绝对不会让咱们这些开发人员投入大量精力去作这样的事情,若是不是全身心投入的,那又怎么能作出好东西来哦。其实大伙都很想作这些,就是有劲使不上,本质仍是咱们公司实力不够,没有这家公司那么多的开发研发的资源。前端

  这些系统必定是每一家成熟的互联网公司都会去作的,所以我今天想根据和这家公司的交流的回忆,思考下这些系统的作法以及会使用到的相关技术,由于我没作过这些系统,只能是靠回忆和本身的理解进行描述,若是有错误的地方还请你们多多包涵哦。java

  首先是监控系统,监控系统很好理解,它的做用是监控线上系统的运行情况,若是线上系统发生问题,那么监控系统会将问题及时的通知到每个相关的人员。咱们公司这样的工做是一个半自动化的状态,不少工做仍是须要大量人力的投入才能完成,可是与咱们交流的公司的监控系统已经实现了监控自动化,虽然该公司的系统比咱们多的多,可是他们监控的人力的成本倒是比咱们少之又少。大型互联网公司的系统每每是成百上千,服务器则是成千上万,所以自动化的监控绝对不是看不到产出的而必定是能够实实在在创造价值的。若是咱们想对这么庞大的资源进行监控,那么咱们就得要去考虑怎么进行监控了,我想这种监控应该首先要定义一些监控的维度,通常最大是系统级别,其次是系统下的功能模块,再细点就是方法层面的,在实际的开发中,通常会从功能模块和方法上控制,这些控制好了,系统级别的监控也就相应的作到了。通常这种监控确定也是会使用到打点的技术,也就是在程序合适的地方引入监控程序,当系统运行出现异常的时候,监控程序会及时的将信息传递到监控的服务器,服务器将这些问题记录下来后经过短信,邮件的方式通知给相关人员。方法级别的监控比较好作,只要监控程序捕获到了程序运行的异常就行,而功能模块的监控则是须要相关人员定义一套捕获规则,当功能模块触发到不符合规则的地方,监控系统就会给相关人员发出警报,与咱们交流的公司这些都实现的不错,并且监控的实时性已经达到了秒级,效率是很是的高的。谈到打点,知道打点技术的人都会有一种担忧,这个打点会不会影响到业务系统的运行了,在监控打点将信息传递到服务端时候,会不会挤占必定的网络资源,打点技术没法避免这些问题的发生,而最优的解决方法就是让这些影响下降到最小,并非由于有这个问题而抛弃打点的方式。该公司怎么解决的,我如今记得不清楚,可是我本身思考解决这样的问题无非有两种(针对java)一种是多线程,一种是RPC的方式,RPC能够说是一种进程的方式,我我的以为线程的侵入性要强于进程的方式,若是是我去实现,我应该会用RPC的方式,由于RPC占用线上系统的资源比较少,它的开销主要是在监控服务端自己以及网络资源,并且咱们很容易控制RPC所占用的宽带资源的比例。互联网公司的系统应该都不会有单点的系统,都会用分布式来实现,而监控系统须要管理那么多的系统和资源,因此它自己的分布式系统的可靠性要求就很是的高,该公司这边解决分布式可靠性的问题是经过zookeeper或者借鉴zookeeper的原理本身实现的一套机制,此次分享我深切感觉到zookeeper技术的重要性了,zookeeper我今天就不展开讨论了,我后面会从新研究下zookeeper,等研究好了,我再专门写一篇文章。监控系统还须要一个很重要的功能就是自动化部署,这点也是很是关键的,能够想象下一个拥有成百上千个系统,成千上万服务器的公司,若是监控系统不能实现自动化部署,避免过多人力介入的办法,那么作出来的监控系统可能还没能体现到自身价值以前,就开始为每一个应用系统埋下了定时炸弹,惋惜本人没有参入过多的系统运维的工做(由于我如今在公司是专职前端)因此我不清楚业内通常是如何作到这点,我只能想象一下,是否是就是使用一些能作批量部署操做的shell脚本就好了。与此同时该公司的监控系统作的也很是人性化,全部的操做均可以在一个Web的管理系统里完成,这个管理系统也是用了大量的可视化图表的方式,直观且易于操做,同时还有相关的绩效管理功能,实在是很是的强大。程序员

  下面我再说说日志系统,经过日志查找线上系统的问题,这是解决生产问题的惟一方式,可是对于查看互联网系统的日志是一件很是痛苦的事情,由于互联网的系统几乎没有单点,都是分布式的,因此查看日志的时候咱们就须要查找不少台服务器,若是碰到程序自己的日志写的不太合理,那么查问题几乎是一件大海捞针的事情,此外,在公司里,生产环境每每都是被严格的管理起来的,只有不多数的人能够直接查看生产日志,通常人员想看生产日志经常会有一大堆冗长的审批过程,这些审批过程保证了生产系统的稳定性和安全性,可是恶果就是严重拉长了问题解决的时间,那么若是有一套实现办公自动化的日志系统那就是很是棒的一件事情了,这里我仍是想说我认为这样系统是实实在在有产出的,是提高公司能力的一个重要手段。与咱们交流的公司就本身研发了一套这样的日志系统,它的日志系统定义了一套日志的规范,应用系统的开发人员能够按这个规范打出日志,该系统除了能打出符合日志规范的日志,还能将应用系统自身的日志拉到日志系统里,这些日志的查看再也不是经过命令行在控制台里看,而是由专门的Web系统来进行查看,他们的Web系统作的挺棒的,能够分组分类的查看相关系统的日志,这些日志在规定的时间里会自动刷新,同时使用者也能够在Web系统里像控制台那样实时的查看相关的日志,只有有相关查看日志权限的人,随时随地不受限制的查看到系统的运行状况。日志系统的设计上某些地方和监控系统相似,也要作到非侵入式,劲量下降系统对生产系统的影响。比较特别的是,在Web系统里看到日志并非保存在生产系统上的日志,而是存放在日志系统里的日志,也就是说该日志系统会实时的同步生产系统的日志,这种同步不是盲目的,而是会根据一个的规则同步到日志系统,这种规则能够保证在Web系统里很容易定位到那个系统,那个功能模块的日志。大量日志存储毫不可能用关系数据库完成,那么想高效的查询到日志就得使用搜索技术,而对方使用的是solr进行搜索的。固然保证日志集群的可靠性,zookeeper就得上场了,zookeeper已是作分布式系统不可避免的技术了。shell

  第三个是统一配置系统,系统的配置通常是指将一些环境的参数,系统的参数或者是某些会常常变化的信息用一种特殊的文件保存起来,这样利于系统的维护和扩展,java里一般使用xml文件和properties文件存储配置信息,而那些会常常改变的信息一般会使用properties文件保存,这种配置管理方式对于规模不大或者变动不多的系统而言十分有效,可是对于互联网公司的大型系统以及一些关联度很高的系统而言,当系统运维到必定程度,配置文件多是最让人沮丧和痛苦的事情,特别是维护它们的方式是经过人力的方法,其潜在的风险也是很是之大的。之前我有篇文章写道zookeeper一个重要特性就是配置管理,该公司实现的统一配置系统就是经过zookeeper来实现的,至于如何使用zookeeper作配置管理,等我研究好了后我在写一篇文章分享下。统一配置系统一样也是可视化的,使用者不用直接到生产机器上修改配置,重启服务器,而是直接在Web管理系统里操做,配错了能够修改,也能够进行回滚,咱们公司这方面和他们真是有差距,咱们要改一个配置须要好几个领导审批,而后兴师动众的到机房上线,时常还会出现配置改错改掉的问题。数据库

  最后是部署系统,生产部署是一个项目的最后一步,也是内心压力最大、风险最高的一步,若是最后上线部署失败了,这种感觉就犹如进行了一次辛苦的长跑,眼看就要到达终点了,没想被一块大石头绊倒了,甚至还会掉到坑里,最后还要挨领导批,那滋味可很差受。咱们公司系统部署的问题不少,咱们公司的环境能够分为五类:办公环境、开发环境、测试环境、预发布环境和生产环境,办公环境、开发环境和测试环境是通的,这个比较好,可是办公环境、开发环境和测试环境同预发布环境同生产环境基本上是彻底隔离的,并且不一样环境之间的环境配置,系统配置等等东西都存在或多或少的差别,常常发生,测试环境运行好好的程序到了预发布环境就出现问题,更揪心的是,测试环境和预发布环境都没问题,上了生产出问题了,并且是环境形成,这就让咱们每一次部署操做都是当心翼翼的,部署后任然还要投入大量的人力和时间进行监控和测试。与咱们交流的公司这边的环境其实比咱们这里还要复杂,它们甚至在预发布环境和生产环境之间还有一个仿真的环境,仿真的环境是能够直接从生产上摘取一个服务器,部署新开发的程序,让相关人员进行测试验证,并且部署环境的切换也是有专门的Web系统进行管理,不一样环境之间能够作到平滑的过渡。这样部署操做不只是安全性以及在效率上都有很大的提高。安全

  与咱们交流的公司说他们几千名的开发人员只须要20几个运维人员,而咱们几十人的开发部就超过了20几个运维人员,的确差距很大,不过这种差距也能够理解的,由于人家有强大的开发团队能够支撑这些内部管理系统的研发,而咱们的开发团队人力是严重不足,但我相信只要公司业务蒸蒸日上,这些事情早晚会作的。服务器

  由此能够看到互联网的技术远比传统的企业软件复杂的多,互联网的技术基本都是分布式的,所以线程、进程、通信、分布式技术以及分布式的可靠性是十分的重要。我上面描述的这四种系统,也不是和咱们交流的公司自创的,也是大量借鉴与美国牛叉的大型互联网公司,例如facebook,谷歌等等,不知道哪里能够得到这样的资料,有人知道能够给我推荐下,我真想好好研究下,由于这种系统实现的难度仍是很是高的,要是能掌握能充分体现程序员的我的价值。网络

相关文章
相关标签/搜索