管理Web下的HTTPS应用

  基于ZeroMQ的实时报纸发布平台

  上篇:C++分布式实时应用框架 (Cpp Distributed Real-time Application
Framework)—-(一):全部介绍

 

版权表明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等作为保留法律追究的义务!

 

  通讯平台作为C++分布式实时应用框架(Cpp
Distributed Real-time
Application Framework)的最宗旨模块,承担了分布式实时框架的根底通信功效。通信平台框架具备了基于Reactor方式的互连网通信能力,并且着重于ZeroMQ库,因而扶助非持久化的message
queue的功力。基于配置文件来机关建立链接关系的效力,能够和景观为主联合同盟,完成无需重启节点的动态扩容缩容等功能。强大的实时监控能力,可以实时反馈每个通信子节点的TPS和时延等重大特性数据。管控业务经过的力量,业务经过的心跳检测,故障时自动重启、保障系统正常运作。完善的平台工具,可以因此报导平台向工作进程发送种种指令,如:调整日志级别,刷新业务参数,启停业务进度等等。上面将顺序介绍通信平台的功效细节。

管理 1
管理 2
管理 3
管理 4
管理 5
管理 6
管理 7
管理 8
管理 9
管理 10
管理 11
管理 12
管理 13
管理 14
管理 15
管理 16

  一、根据配置文件自动建立通讯链接拓扑关系

  常见的分布式系统日常将经过间、节点间的各个通信关系写死在业务代码中,那是造成代码复杂难以知晓的原由。我们革新地将富有的通信关系提取到AppInit.json配置文件中,业务代码中不再包罗其余与电视公布连接相关的情节,使业务代码能够更令人瞩目于事情处理,而不用分心于复杂的分布式节点通信当中。下边大家将带我们看下图所示通信关系的配备。

 管理 17

  OLC作为数据分发节点,给多少个业务处理节点分发音讯。业务处理节点内部由OCDis接收外部新闻,转载给内部的OCPro业务处理进度,并负担处理完后的回包。

OLC配置部分:

   "OLC" : {
      "AUTO_START" : "YES",
      "ENDPOINTS" : [
         {  // 用于与SmartMonitor建立心跳
            "name" : "MonitorSUB",   
            "zmq_socket_action" : "CONNECT",  // ZMQ的连接模式
            "zmq_socket_type" : "ZMQ_SUB"     // ZMQ的通讯模式
         },
         { // 下发消息给OCDis,这边存在转发功能,支持业务实现按条件转发
            "downstream" : [ "OCDis2OLC"],
            "name" : "NE2OLC",                // 根据这个名字在业务代码中实现转发
            "zmq_socket_action" : "BIND",
            "zmq_socket_type" : "ZMQ_STREAM" 
         },
         { // OLC到OCDis的链路
            "name" : "OCDis2OLC",
            "statistics_on" : true,
            "zmq_socket_action" : "CONNECT",
            "zmq_socket_type" : "ZMQ_DEALER"
         },
         { // OCDis回OLC的链路,之所以来去分开,主要用于实现优雅启停功能(启停节点保证不丢消息)
            "name" : "OCDis2OLC_Backway",
            "statistics_on" : true,
            "zmq_socket_action" : "CONNECT",
            "zmq_socket_type" : "ZMQ_DEALER",
            "backway_pair" : "OCDis2OLC"
         },
         {  // 用于与SmartMonitor的命令消息链路
            "name" : "OLC2Monitor",
            "zmq_socket_action" : "CONNECT",
            "zmq_socket_type" : "ZMQ_DEALER"
         },
      ],
      "ENDPOINT_TO_MONITOR" : "OLC2Monitor",
      "INSTANCE_GROUP" : [
         {
            "instance_endpoints_address" : [
               {
                  "endpoint_name" : "NE2OLC",
                  "zmq_socket_address" : "tcp://*:6701"
               },
               {
                  "endpoint_name" : "OCDis2OLC",
                  "zmq_socket_address" : [
                     "tcp://127.0.0.1:7201"   // 跨机的IP地址与端口,配合状态中心可实现自动管理,无需人工参与配置
                  ]
               },
               {
                  "endpoint_name" : "OCDis2OLC_Backway",
                  "zmq_socket_address" : [
                     "tcp://127.0.0.1:7202"
                  ]
               },
               {
                  "endpoint_name" : "OLC2Monitor",
                  "zmq_socket_address" : "ipc://Monitor2Business_IPC"
               },
               {
                  "endpoint_name" : "MonitorSUB",
                  "zmq_socket_address" : "ipc://MonitorPUB"
               }
            ],
            "instance_group_name" : "1"
         }
      ]
   },

 OLC程序:

static const char * ENDPOINT_NE2OLC = "NE2OLC";
static const char * ENDPOINT_OLC2OCDIS = "OCDis2OLC";
static const char * ENDPOINT_MONITORSUB = "MonitorSUB";

int main(int argc, char * argv[]) {

    SmartUtilities::Daemonize();
    OLCProxyServer server(argc, argv);

    if (!server.Initialize(logger))
        return -1;
  
    // OLC与OCDis的消息处理
    server.SetCallbackOnReceivingMessage(ENDPOINT_OLC2OCDIS, bind(&OLCProxyServer::ReceiveFromOCDis, &server, _1, _2, _3));

  // OLC与SmartMonitor的消息处理
    server.SetCallbackOnReceivingMessage(ENDPOINT_MONITORSUB, bind(&OLCProxyServer::ReceiveFromMonitorSUB, &server, _1, _2, _3));

  // 解析消息包实现业务功能
    server.SetPacketParserFunction(ENDPOINT_NE2OLC, bind(&OLCProxyServer::ParseStreamCCR, &server, _1, _2, _3));

  // 设置消息转发具体规则
    server.SetDownstreamSelector(ENDPOINT_NE2OLC, bind(&OLCProxyServer::StreamSelector, &server, _1, _2));

    server.Run();
    return 0;
}

  二、在线更新链接拓扑能力

  通信平台支撑在线重新读取更新的安顿文件,更新网络拓扑,自动建立新链接、断开旧链接的力量。合营情状为主可以完结无需重启节点的动态扩容缩容等职能。

  管理 18

明天先到此刻,希望对你在音讯安全,公司架构,系统架构设计与评估,团队管理,
项目管理, 产品管理,团队建设 有参照意义 , 您可能感兴趣的稿子:
HTTP
API接口安全设计

新闻安全领域大数额拔取实战一
互连网业务安全实战
数字化IT人才与集体
网络电商购物车架构衍生和变化案例
互连网业务场景下新闻队列架构
信息系统架构设计演进
网络电商搜索架构衍变之一
商厦音信化与软件工程的迷思
商家项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT社团与分享式领导
学习型社团与合营社
合营社立异文化与品级观念
协会目的与个体目的
初创公司人才招聘与治本
红颜公司环境与商家文化
信用社文化、团队文化与学识共享
高成效的集体建设
花色管理挂钩布署
营造便捷的研发与自动化运维
某大型电商云平台实践
网络数据库架构设计思路
IT基础架构规划方案一(互连网连串规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实践流程
餐饮行业解决方案之业务设计流程
供应链要求调研CheckList
集团应用之性质实时度量系统衍生和变化

  三、SmartMonitor进度监控管负责人务经过与SmartTool工具进度

  业务经过可以跟SmartMonitor建立通信联系,SmartMonitor可以检测业务进程的心跳,以担保工作进度的可用。SmartMonitor通过AppCount.json来管理节点业务经过,落成合并启停等作用。

{
  "OCPro": {
    "IN":  2,      // 业务进程可以有不同的种类,后面代表进程数
    "PS":  3,
    "SMS": 4,
  },
  "OCDis": 3,
  "SERVER_TYPE":"OCS"  // 节点的类型
}

  仍是可以透过SmartTool工具进度,来给工作经过发送种种吩咐,如:调整日志级别,刷新业务参数,启停业务经过等等。

 

     1. 开行平台

      SmartMonitor

 

      2. 停平台

      SmartTool stop all

   
  停指定进度(甘休后会被SmartMonitor重新拉起)

      SmartTool stop OCPro
甘休所有工作的OCPro进程

      SmartTool stop  OCPro.IN
停止IN业务的OCPro进程

      SmartTool stop 4829
停止PID为4829的进程

 

      3. 调动应用层、框架层日志级别

     
其中,日志级别为error,warn,info,debug,trace

      SmartTool log 进度名
level=日志级别,flush=日志级别

      比如: SmartTool log
 OCPro level=debug,flush=debug

如有想打听越来越多软件设计与架构, 系统IT,集团音讯化, 团队保管
资讯,请关怀自我的微信订阅号:

  四、通信平台品质数据 

 管理 19

 

 进度Z负载控制信息流量,进度A负责发、收新闻,总括时延数据。进程B收到音讯后担当回音讯。

 管理 20

 品质瓶颈首要在A机,既要负责收发包,又要计算时延数据,还要控制流量。

 

未完待续…

 

 技术互换合营QQ群:436466587 欢迎研讨调换

管理 21

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归小编和网易共有,欢迎转发,但未经小编同意必须保留此段注脚,且在篇章页面显明地方给出原文连接,否则保留追究法律义务的职分。
该小说也还要发布在我的独立博客中-Petter Liu
Blog

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注