论文部分内容阅读
在字节跳动公司搜索系统中,分布式搜索检索(Search Retrieval)服务是其用于获取搜索查询结果的子系统。为了保证检索服务的稳定运行,以及上下游服务能够正确找到其服务实例,开发及运维人员需要一套与业务逻辑耦合度较低的运维管理系统,为其提供运维支持和服务治理功能。因此,运维管理系统需要在尽量不入侵业务代码的情况下接入系统完成运维操作,并为业务服务提供准确的元信息描述。鉴于此,本文以事件(Event)表示业务系统状态发生变化时,系统或运维人员发出的通知,提出采用基于事件驱动(Event-Driven)架构模式进行系统的架构设计。各类事件所携带的不同参数及其值表示相应运维任务涉及的目标和具体操作,由系统内各个功能模块完成事件的发送、接收和处理,进而执行用户所需的各类运维操作。通过事件携带命令和参数进行运维系统和业务系统之间的通信,期望能够在为业务系统提供运维支持的同时降低二者的耦合,减少运维系统接入业务所需的成本。同时,为业务运行时所涉及包括集群、数据集合和服务实例在内各个实体,系统维护能够准确描述业务服务实例当前状态信息的元数据,帮助业务系统完成服务注册。系统主体采用Python2.7版本进行开发,使用分布式MySQL数据库存储系统维护的数据实体状态信息以及系统内流转的事件记录,采用Flask框架开发系统的HTTP API,采用gflags命令行参数解析工具提供命令行语言用户接口,使用Consul客户端进行服务注册,在访问分布式数据库时使用基于ZooKeeper的分布式锁保证数据一致性。系统各模块以独立进程的形式,部署在基于Docker容器的相互隔离的节点中。本文完成了上述系统整体架构和主要功能的设计和实现。系统1.0版本上线后为公司搜索引擎检索服务提供运维支持,负责维护系统集群及数据副本从部署上线到下线销毁的全过程,并进行实例信息的服务注册,大大降低了人工运维的工作量和误操作概率,为集群内上千台服务器的运维操作提供了便利,为业务系统的稳定运行提供支持。