为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
架构

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


基础设施

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。

cat

cat是大众点评开源的一套基于java的实时应用监控平台,主要应用于服务中间件框架(MVC 框架、RPC 框架、持久层框架、分布式缓存框架)的监控,为开发和运维提供各项性能指标、健康检查、自动报警等可视化服务。
除了上面提到的工具提供的错误日志统计、CPU负载、各种连接池状态之外,cat还可以记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,可以用来记录一段代码的执行时间和次数,特别地,对Java应用程序,它可以上报一些如JVM内存、GC等核心指标。
不只如此,对于业务方面的指标,也可以利用它来进行监控和统计,比如订单数、交易额、支付成功率等。
功能真的是很全面了,有很多业界公司都在使用这个工具,但忍不住要吐槽的一点是,界面可能真的有点丑,不如上面的sentry好看。

其他

Gitlab

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

phabricator

使用PHP编写的code review平台。

redmine

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


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

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

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



作者:古二白
链接:https://www.jianshu.com/p/64ecd80536a2


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
51
获赞与收藏
178

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消