zoukankan      html  css  js  c++  java
  • Lotus分析

    Lotus的任务

    Lotus是一个消息通知服务,topicsubscription是多对多的关系。后面我加了一个发送自定义邮件和自定义短信的功能。


    产品里面有个监控报警和通知列表。监控报警里创建alarm时会让选通知给谁。供选择的就是topic。如果alarm被触发,就会发通知给和该alarm绑定的topictopic再查找它的所有subscription,都发通知。



    Lotus代码分析

    1.lotus的两个进程

    lotus-api

    lotus-dbsync


    2. lotus-dbsync

    数据流程:

    /usr/local/bin/lotus-dbsync启动,会去调用/lotus/cmd/manage.pymain函数。

    main里会调用/lotus/db/migration.py里的dbsync函数。

    migration.py里的dbsync调用了/lotus/common/utils里的LazyPluggable来动态获取backend以实现升级或降低到指定版本。

    sqlalchemy='lotus.db.sqlalchemy.migration'作为LazyPluggable的第四个参数,会在 lotus.db.sqlalchemy.migration里进行版本比较来实现升级或降级。

    最底层的升级或降级或在migrate这个第三方库里实现,这里只调用接口即可。

    这个进程的任务是对数据库的升级或降级。取决于指定的版本号。不过一般用来升级到最新。

    3. lotus-api

    lotus-api可以理解成跑在simple_server上的一个pecan app。它的任务是给前端提供restful api

    用的是pecan的路由规则。

    比如:v1/topics,就会到v1这个目录里找topics.py,然后在根据是什么方法(POST/PUT等)或参数(topic_id)来确定具体调用哪个API

    目前只有有四个root controllerstatisticstopicssubscriptionspublish

    1statistics:主要用来创建metric

    2topicsTopicsController里面有个lookup,可以根据topic_id路由到TopicController

    TopicsController里面有两个提供给前端用的接口postget_all

    post是创建一个topic

    TopicControllergetdeleteputpublish

    get:获取一个topic(topic_id指定)的详细信息

    delete:删除一个topic(topic_id指定)

    put:修改一个topic(topic_id指定)

    publish:topic(topic_id指定)的所有subscriptionalarm信息

    都是对单个topic的操作。

    所以我怀疑是否将TopicsController里面的post移到TopicController里面会更合适?

    3subscriptions

    一级SubsController, 二级是ConfirmController SubController

    url查找到SubController后会根据sub_id lookupSubController

    ConfirmController的路由是由SubsController里面confirm = ConfirmController()指定。

    这一部分主要是订阅topic,确认等内容。subscription里面最重要的一个参数是endpoint。因为消息是发送到这个endpoint,可以是邮箱或短信方式。这里共两种protocol:email和sms。

    4publish

    自定义发送邮件和短信。这部分是我写的,比较简单。

    Publish.py 里面有严重的瑕疵,我自己造成的。

    L8-L9 只能import module(PEP8规定)

    L23-L24 8,9导致这SMS() Email() 严重不规范。


    . DB

    所有的服务都是基于数据。

    lotus太小,目前只有三个tableTopicSubscriptionTopic_Sub

    Topic存储topic相关字段

    Subscription存储 subscription相关字段

    Topic_Sub存储topicsubscription的绑定

  • 相关阅读:
    压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate .
    [转](多实例)mysql-mmm集群
    mysql的MMM高可用方案
    压力测试工具
    memcached 的简介、安装、命令
    memcached 最大连接数及其内存大小的设置
    mysql优化
    mysql
    30道Linux面试题
    门户网站架构Nginx+Apache+MySQL+PHP+Memcached+Squid
  • 原文地址:https://www.cnblogs.com/HpuAcmer/p/4713126.html
Copyright © 2011-2022 走看看