微服务架构中的常用开源工具

作者: 古二白 | 来源:发表于2018-07-24 01:04 被阅读121次

    搞微服务真的很麻烦的,为了解决单点的性能问题引入微服务,同时也引入了无数的新的问题出现。对于这些问题,亦有一些新的概念和工具被发明出来,这篇记录一下,我见过的各种微服务中的开源工具,以及它们所存在的意义,提供了哪些便利或者解决了什么问题。


    基础设施

    ZooKeeper

    ZooKeeper是一个具有高可靠性的分布式的协作工具,基于PAXOS协议,其实现了一个可保证分布式一致性的类文件系统。
    利用它的这个机制以及它提供操作与读取该类文件系统的API,分布式系统可用它实现各种功能,包括数据发布/订阅负载均衡命名服务分布式协调/通知集群管理Master选举分布式锁分布式队列服务发现等多个分布式中常见的需求应用场景。

    rabbitmq

    基于AMQP协议,使用非常小众的erlang语言编写的分布式消息队列,有非常详实的文档与tutorials,同时提供了web页面,用于管理和查看队列的使用情况。

    jumpserver

    使用Django编写的跳板机系统,可通过终端登录各测试机,同时提供web应用,可用于某服务器上文件的上传与下载,跑脚本什么的再方便不过了。
    它有着全套的权限管理,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好,采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发限制。

    azkaban

    由linkedin研发的分布式调度工具,使用Java编写,可使用Cron的配置方式来管理分布式调度任务,数据落于MySQL,整体还是蛮重的。
    具有便于使用的web UI,并且在任务执行成功或失败时可以发送邮件通知,并且提供重试机制。

    Apollo

    携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
    服务端基于Spring Boot和Spring Cloud开发,提供了Java,Python等语言的接入sdk。

    RPC框架

    微服务中RPC框架当然是少不了的,最常用的是Facebook研发的thrift,以及阿里的dubbo,现都归于Apache基金会下,此外,饿了么研发的thriftpy在Python领域也比较优秀。
    当然,在Thrift框架的上层,公司往往会再包一层,做为自己的框架,在其中引入sentry、zookeeper,gitlab地址pull idl等基于公司具体情况的处理。

    发布

    jenkins

    jenkins是由Java编写的开发自动化平台,其本身提供了1000+的plugins可供各种自动化场景使用,使用者可以通过编写jenkinsfile来自定义自己的自动化任务。
    使用jenkins的常见场景为项目构建运行自动化测试静态代码分析项目部署

    spinnaker

    spinnaker是一个由Netflix开发的使用Python编写的用于持续集成的平台,主要用于结合容器发布各环境的代码,发布地点可以是各种云平台,包括 AWS EC2, Kubernetes, Google Compute Engine, Google Kubernetes Engine, Google App Engine, Microsoft Azure和Openstack等,而这,已经包含了市场上所有主流的云服务商。

    它的一个很大的特点是自动化,可以通过git events, Jenkins, Travis CI, Docker, CRON等事件来触发构建而不用人工手动去操作,在工作中的一个非常便利的常见使用场景是在自己的开发分支使用git push命令后,spinnaker将会自动构建这个branch的容器,并生成相应的访问url,真的是非常方便。

    kubernetes

    使用Go语言编写的容器管理平台,它的官网对自己的简介为Production-Grade Container Orchestration,Automated container deployment, scaling, and management。
    用于编排、发布容器,提供水平伸缩性,便与扩展,并且可以登录某个容器,运行命令、查看log等。

    监控

    sentry

    你不可能没听说过的跨平台Bug追踪网站,Github上17000+star,其受欢迎程度可见一般。它使用Python编写,并且提供了大部分主流语言的API供其使用,它能很好地融入log系统中,完备地记下问题出现当时的调用链与场景。
    常见的使用方式为将它纳入到各种公司框架中,使得开发人员直接拿到logger,当使用warning或error时,sentry就会记录这个事件并发邮件给到关心它的人。

    open-falcon

    小米开源的微服务监控系统,使用它可以查看各服务器的状态,包括网络IO,与CPU运行情况,以及数据库的负载。
    生成user friendly的图表,提供强大的统计与自定义功能,用户可以按照自己想要的方式获取信息。

    kibana

    elastic团队的作品,用于数据收集与分析,可以用于根据各种条件(时间、关键字)等来查询各环境的日志,正是根据这些日志,它可以生成各种统计图表等,被称为elastic技术栈的视窗。
    不过说实话它这个查询的界面有些难懂,不够user friendly。

    其他

    Gitlab

    开源的用于公司自建代码仓库的项目,其功能丝毫不逊于Github。

    phabricator

    使用PHP编写的code review平台。

    redmine

    使用ROR编写的项目管理工具,主要用于线上bug的提出、跟踪与管理。


    以上内容只是基于我在工作中接触过的,但这并不是全部,还有一堆其他的自研应用用于优化整个流程与开发效率,比如Nginx配置平台,以及一些基于业务的数据分析平台,数据打点平台,API管理应用(与spinnaker集成直接将前后端连接起来),灰度发布平台,AB Test实验管理平台,等等,基于一个思想就是有开源的就尝试使用开源的产品,找不到合适的,也不妨花些时间自己研发,只要它可以带来整体效率的提升,便是很有意义的。

    当然,我上面所提到的例子,可能并不是某个领域的最佳的解决方案,或者在整个微服务架构内还不够全面,希望大家可以分享一下自己觉得好的工具,我也会随着自己见识的不断提升,来逐渐更新这个列表。

    总之,devops、微服务真的是有太多的学问,还有很多我没有接触过的东西,里面的水真的是无限深。有太多的工具,太多的可以优化的点,面对这些我们倒也用不着惊慌与烦躁,工具是为了给人带来便利的,一个工具的出现必然是为了解决或者优化一个问题,了解得越多,自己对这种大型网站的整体理解与感知就会更深一些,

    相关文章

      网友评论

      • 唯选:这个rabbitMQ的介绍应该对应的是EMQ吧?
      • 5ffea1b71c75:spinnaker 你们在用吗? 这个感觉非常复杂
        5ffea1b71c75:@古二白 生产环境打算找个工具来部署,:flushed:这个好费劲
        5ffea1b71c75:@古二白 我现在也是到jenkins这步了,整个ci/cd走通了,只是还没用上spinnaker。 感觉这工具复杂的不懂怎么下手
        古二白:有在用,主要用来发布各个环境的容器到kubernetes,整个过程是有点复杂,git push后触发jenkins生成容器,然后在spinnaker可以指定某个环境的某个容器发布到kubernetes,之后可以再上kubernetes看log,这些都是devops同学辛苦集成到一起的。

      本文标题:微服务架构中的常用开源工具

      本文链接:https://www.haomeiwen.com/subject/epesmftx.html