mooon introduction

Post on 13-Jan-2016

50 views 0 download

description

mooon introduction. 飞月 QQ 群: 70457399. http://code.google.com/p/mooon. 内容提纲. 项目背景. 设计理念. 分层结构. 基础类库. 公共组件-Server. 公共组件-Dispatcher. 公共组件-Agent. 公共组件-Observer. 公共组件-HttpParser. 分布式平台. 消息调度器. 编程模式. 应用前景. Page  2. 背景. 未雨绸缪,掌握未来的主动权. 1. Page  3. 系统概述. 一个 开源 分布式基础平台. 简洁高效. - PowerPoint PPT Presentation

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

应用示例

从这里开始,不一样的精彩不一样的精彩 !!

敬请期待。。。有您更精彩有您更精彩 !!!!