mooon introduction
description
Transcript of mooon introduction
mooon introduction飞月 QQ群: 70457399
http://code.google.com/p/mooon
Page 2
内容提纲
项目背景
设计理念
分层结构
基础类库
公共组件 -Server
公共组件 -Dispatcher
公共组件 -Agent
公共组件 -Observer
公共组件 -HttpParser
分布式平台
消息调度器
编程模式
应用前景
背景
未雨绸缪,掌握未来的主动权1
Page 3
Page 4
系统概述
• 简洁高效
• 可扩展可运营
严格的职责划分,简单的数据结构,成就 mooon的简洁高效
横纵有致,松散而紧凑的结构设计,成就 mooon的可扩展可运营
• 一个开源分布式基础平台
细节决定品质
细节不一定决定成败,但一定决定品质1
Page 5
设计理念
简单,为王简单,为王
单一职责(SRP)
替换原则(LSP)
开放封闭(OCP)
依赖倒置(DIP)
接口隔离(ISP)
Page 6
Page 7
mooon – 分层结构
领域平台领域平台 AA 领域平台领域平台 BB
公共组件
分布式平台
基础类库
操作系统
领域平台领域平台 CC
http://code.google.com/p/mooon
基础类库
不输出日志,错误以异常方式抛出1
netnet与网络相关的CEPoller、 CTcpClient、 Clistener 、网络工具 .
syssys与系统相关的线程(池)、锁、事件队列、系统工具、系统信息、日志器、 main函数模板、对象池 /内存池 .
utilutil通用数据结构、算法等 数组队列、字符串工具、命令行参数解析、列表队列、 CTokenList.
Page 8
公共组件
Add your text in here
Server
Agent
Dispatcher
Observer
。。。
与基础类库的区别: 通常包含了复杂的逻辑,而且会有日志输出;公共组件基于基础类库实现。
公共组件ClustUtil
HttpParser
Page 9
公共组件 - Server 应用场景
MOOON-server Applicationthreads
MessageQUEUE
PUSH GET
Client
Client
Client
Client
Client
Client
Client
send
Page 10
公共组件 - Server 工作原理
EPOLL
Network
TCP/IP
IPacketHandler
AsynchronousCallback
MOOON-server
Application
get_request_buff er( )get_request_si ze( )
get_request_off set ( )on_handl e_request ( )
i s_response_f d( )get _response_f d( )get _response_buff er( )get _response_si ze( )get _response_off set ( )move_response_off set ( )bef ore_response( )on_response_compl eted( )
EPOLLIN EPOLLOUT
Page 11
公共组件 - Server 结构
IPacketHandler<<CALLBACK>>
+get_request_buffer()+get_request_size()+get_request_offset()+on_handle_request()+is_response_fd()+get_response_fd()+get_response_buffer()+get_response_size()+get_response_offset()+move_response_offset()+before_response()+on_response_completed()
IConfig<<CALLBACK>>
IConnection
+self_port()+peer_port()+self_ip()+peer_ip()
CContext
IFactory<<CALLBACK>>
CListener
IThreadFollower<<CALLBACK>>
+before_run()+after_run()+before_epoll()+after_epoll()
CWaiter
CWaiterPool
CWorkThread<<thread>>
CThreadPoolCWorkThread
CListenManagerCListener
CEpoller
1..*
1..*
CTimeoutManagerCWaiter
use IPacketHandler<<CALLBACK>>
+get_request_buffer()+get_request_size()+get_request_offset()+on_handle_request()+is_response_fd()+get_response_fd()+get_response_buffer()+get_response_size()+get_response_offset()+move_response_offset()+before_response()+on_response_completed()
IConfig<<CALLBACK>>
IConnection
+self_port()+peer_port()+self_ip()+peer_ip()
CContext
IFactory<<CALLBACK>>
CListener
IThreadFollower<<CALLBACK>>
+before_run()+after_run()+before_epoll()+after_epoll()
CWaiter
CWaiterPool
CWorkThread<<thread>>
CThreadPoolCWorkThread
CListenManagerCListener
CEpoller
1..*
1..*
CTimeoutManagerCWaiter
use
Page 12
公共组件 - Dispatcher 应用场景
MOOON-dispatcher
Server
Server
Server
Server
Server
Server
Server
Server
Application
PUSH
Async-send
压力和性能测试工具
消息广播和消息分发
Page 13
公共组件 - Dispatcher 工作原理
EPOLL
Network
TCP/IP
Asynchronous
MOOON-dispatcher
Application
get_buff er( )get _buff er_l ength( )
handl e_repl y( )bef ore_send( )
send_compl eted( )send_progress( )sender_cl osed( )
sender_connected( )sender_connect_f ai l ure( )
sender_t i meout ( )
push_message( )open_sender( )cl ose_sender( )get_sender( )rel ease_sender( )
EPOLLIN EPOLLOUT
ISenderIReplyHandler
Page 14
公共组件 - Dispacher 结构
ISenderTable
+open_sender()+close_sender()+release_sender()+remove_sender()
IManagedSenderTable
+get_sender()
IUnmanagedSenderTable
+get_sender()
IDispatcher
+get_thread_number()+get_managed_sender_table()+get_unmanaged_sender_table()
CDispatcherContext
CSendThread<<thread>>
CManagedSenderTable CUnmanagedSenderTable
CSenderTable
CThreadPool
CSendThread
1..*
CUnmanagedSender0..*CManagedSender 0..*
CEpollerCTimeoutManager
CSender
CSender<<timeoutable,listable>>use
ISenderTable
+open_sender()+close_sender()+release_sender()+remove_sender()
IManagedSenderTable
+get_sender()
IUnmanagedSenderTable
+get_sender()
IDispatcher
+get_thread_number()+get_managed_sender_table()+get_unmanaged_sender_table()
CDispatcherContext
CSendThread<<thread>>
CManagedSenderTable CUnmanagedSenderTable
CSenderTable
CThreadPool
CSendThread
1..*
CUnmanagedSender0..*CManagedSender 0..*
CEpollerCTimeoutManager
CSender
CSender<<timeoutable,listable>>use
ISender
+str()+push_message()+get_sender_info()
CManagedSender CUnmanagedSender
SenderInfo<<struct>>
IReplyHandler<<CALLBACK>>
+get_buffer()+get_buffer_length()+get_buffer_offset()+before_send()+send_completed()+send_progress()+sender_closed()+sender_timeout()+sender_connected()+sender_connect_failure()+handle_reply()
CSender<<timeoutable,listable>>
ISender
+str()+push_message()+get_sender_info()
CManagedSender CUnmanagedSender
SenderInfo<<struct>>
IReplyHandler<<CALLBACK>>
+get_buffer()+get_buffer_length()+get_buffer_offset()+before_send()+send_completed()+send_progress()+sender_closed()+sender_timeout()+sender_connected()+sender_connect_failure()+handle_reply()
CSender<<timeoutable,listable>>
Page 15
公共组件 - Agent 应用场景
Application
Agent
Center(Master)
Application
Agent
Application
Agent
Application
Agent
Application
Agent
Application
Agent
Application
Agent
Application
Agent
Application
Agent
Application
Agent
通用的主从结构通讯框架
系统资源采集和提供窗口
运行状态数据采集窗口
进程对外门户通用解决方案
Page 16
公共组件 - Agent 结构
Page 17
CAgentContext
IAgent
+get_current_time()+void report(const char*, uint16_t, bool can_discard)+register_command_processor()+deregister_command_processor()
CAgentThread<<thread>>
+put_message()+get_message()+enable_queue_read()+enable_connector_write()+register_command_processor()+deregister_command_processor()+set_center()
CAgentConnector<<epollable>>
CResourceThread<<thread>>
CReportQueue<<epollable>>
CEpoller
ICommandProcessor
+get_command()+on_message()
0..*
CSendMachine
+is_finish()+continue_send()+send()+reset()
CRecvMachine
+work()+reset()
CCenterHost
-_ip-_port-_reconn_times
1..*
CProcessorManager
+register_processor()+deregister_processor()+on_message()
公共组件 - Observer 结构
IObserverManager
+register_observee(IObservable*)+deregister_objservee(IObservable*)
IObservable<<CALLBACK>>
+on_report(IDataReporter*)
IDataReporter<<CALLBACK>>
+report(format, ...)+report(data, data_size)
CObserverThread<<thread>>
CObserverContext0..*
IObserverManager
+register_observee(IObservable*)+deregister_objservee(IObservable*)
IObservable<<CALLBACK>>
+on_report(IDataReporter*)
IDataReporter<<CALLBACK>>
+report(format, ...)+report(data, data_size)
CObserverThread<<thread>>
CObserverContext0..*
立体化监控
Page 18
公共组件 - Observer 效果
[ 日期时间 ]
[ 状态集代码 ]
[ 状态集名称 ]
成功接受的连接个数接受失败的连接个数主动关闭的连接个数被动关闭的连接个数溢出的连接个数异常的连接个数已接收的数据字节数已发送的数据字节数保持长连接的次数
状态数据格式:[2011-11-11 11:11:01][0x1111][server]1000,0,900,100,0,0,1111,1111,0[2011-11-11 11:11:11][0x1111][server]1111,0,201,240,0,0,1111,1111,0[2011-11-11 11:11:21][0x1111][server]700,0,50,10,0,0,1111,1111,0[2011-11-11 11:11:31][0x1111][server]890,0,900,100,0,0,1111,1111,0[2011-11-11 11:11:41][0x1111][server]60,0,900,100,0,0,1111,1111,0[2011-11-11 11:11:51][0x1111][server]9,0,900,100,0,0,1111,1111,0[2011-11-11 11:12:01][0x1111][server]983,0,900,100,0,0,1111,1111,0[2011-11-11 11:12:11][0x1111][server]340,0,900,100,0,0,1111,1111,0[2011-11-11 11:12:21][0x1111][server]634,0,900,100,0,0,1111,1111,0[2011-11-11 11:12:31][0x1111][server]4567,0,900,100,0,0,1111,1111,0[2011-11-11 11:12:41][0x1111][server]482,0,900,100,0,0,1111,1111,0[2011-11-11 11:12:51][0x1111][server]576,0,900,100,0,0,1111,1111,0[2011-11-11 11:13:01][0x1111][server]356,0,900,100,0,0,1111,1111,0[2011-11-11 11:13:11][0x1111][server]893,0,900,100,0,0,1111,1111,0[2011-11-11 11:13:21][0x1111][server]468,0,900,100,0,0,1111,1111,0
数据采集间隔: 10 秒
Page 19
公共组件 - Observer 数据采集
CObserverThread CObserverContext IObservable IDataReporter
run()
do_millisleep()
collect()
on_report()
report()
Page 20
公共组件 - HttpParser
GET http://www.hadoopor.com/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
Host: www.hadoopor.com
HTTP/1.1 200 OK
Date: Wed, 16 Nov 2011 08:26:05 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-Powered-By: PHP/5.2.17
Set-Cookie: expires=Wed, 23-Nov-2011 08:26:05 GMT
Content-Type: text/html
X-Cache-Lookup: MISS from proxy:1080
Transfer-Encoding: chunked
请求包: 响应包:
HTTP 数据包解析器
Page 21
公共组件 - HttpParser 结构
IHttpParser
CParseCommand
+reset()+execute()+set_next()+get_next()+set_event()
CNonNameValuePairCommandCMethodCommand
CURLCommand CVersionCommand
CCodeCommand
CDescribeCommand
CNameValuePairCommand CHeadEndCommand
CHttpParser
IHttpParser
CParseCommand
+reset()+execute()+set_next()+get_next()+set_event()
CNonNameValuePairCommandCMethodCommand
CURLCommand CVersionCommand
CCodeCommand
CDescribeCommand
CNameValuePairCommand CHeadEndCommand
CHttpParser
IHttpEvent<<CALLBACK>>
CParseCommand
+reset()+execute()+set_next()+get_next()+set_event()
CHttpParser -_current_command
-_next_command
IHttpEvent<<CALLBACK>>
CParseCommand
+reset()+execute()+set_next()+get_next()+set_event()
CHttpParser -_current_command
-_next_command
Page 22
Page 23
mooon – 分布式平台
Page 24
mooon – 平台架构
Page 25
mooon – 平台特性
简单多线程编程
高效的消息调度
微内核
无缝服务热升级
透明化运行
业务进程
平台特性
业务运行在独立的进程中
立体化的状态数据
Session 线程绑定
新旧版本同时在线
Page 26
mooon – 消息调度器
MOID - mooon object ID
CSchedContext
IScheduler
+submit_message()+load_service(const TServiceInfo& service_info)+unload_service(uint32_t service_id, uint32_t service_version)
CKernelThread<<thread>>
+put_message()
CServieProcess
+create()+destroy()
CServiceThread<<thread>>
CServieThreadPool
1..*
CProcessBridge
IDistributedObject
+on_request()+on_response()+on_timer()
CKernelThreadPool
1..*
CServieTable
+put_message()+load_service()+unload_service()
CKernelServie
+on_message()+create()+destroy()
*
CSchedQueue<<epollable>>
+put_message()
-_request_queue
IMessageBridge
+on_message()
CThreadBridge
IServiceBridge
+create()+destroy()
CProcessMessageBridge
-int _message_pipe[2]CThreadMessageBridge
-_response_queue
CDistributedObjectTable
+get_object()
1..*
<<1 vs 1>>
CService
+on_create_session()+on_destroy_session()
CSession
*
<<pipe>>
TServiceInfo<<struct>>
+uint32_t service_id+uint16_t num_threads+uint32_t queue_size+bool is_process_mode
CNullKernelService
CNullDistributedObject
*
+new
CDistributedObject
+send_message()+set_timer()+kill_timer()
IMessageBridgeProxy
+send_message()
Page 27
编程模式
应用前景
大规模数据存储大规模数据实时计算大规模数据离线处理
1. 分布式工作流引擎2. 分布式协作系统
各种后台服务器
高性能服务集群
分布式业务系统
海量数据平台
Page 28
Page 29
应用示例
从这里开始,不一样的精彩不一样的精彩 !!
敬请期待。。。有您更精彩有您更精彩 !!!!