狠狠撸
Submit Search
轻量分布式服务框架
?
11 likes
?
2,638 views
-Xing Xing
Follow
1 of 21
Download now
Downloaded 85 times
More Related Content
轻量分布式服务框架
1.
轻量分布式服务框架 Skynet 分析与应用
邢星(mikespook) mikespook@gmail.com http://mikespook.com weibo & twitter @mikespook
2.
云之神话 ●
资源共享 ● 软件即服务(SaaS) ● 按需分配 ● 平台即服务(PaaS) ● 隔离抽象 ● 基础设施即服务(IaaS) ● 服务式使用 ● ......(XaaS) ● 自助化/自动化 ● ......
3.
我们有什么? ●
Google App Engine ● Google Compute Engine ● Amazon Web Service ● Heroku ● Openhift ● DNSPod ● 监控宝 ● 七牛云存储 ● ......
4.
够了吗? ● 物理瓶颈——跨洲际、大延迟、不可控制 ● 政策风险——被墙、支付困难、沟通不顺 ●
历史负债——一个不可拆分的核心服务 老板信任吗?
5.
拍脑袋 ● 租赁SaaS对外围功能进行支撑。 ● 用
OpenStack 什么的,自建私有云…… 对于核心业务…… 这样有意义吗?
6.
最终倒在了一个无法云化的核
心业务系统上?
7.
Brain Ketelson ● 一个巨大的代码单元实现的大应用,很难在不
带来麻烦的前提下,对某些部分进行微小的修 改。 ● 更小的组件允许在不影响其他部分的前提下 进行调整,也更容易通过增加服务器的方式增 加更多的服务节点来提升系统容量。
8.
新的问题 ● 服务组件碎片化 ● 服务总线成为瓶颈 ●
管理单元带来的单点隐患
9.
Skynet - 分布式服务框架 ●
使用 Go 语言编写 ● 用于在分布式应用中,同服务进行通讯 ● 重度依赖 Doozer ● 无需管理节点,服务自我完备 ● 开源,社区活跃
10.
Doozer 用于存储小量、极端重要的数据,保证了高可用和完全一致 性。当数据变化时,它立刻通知接入的客户端(无缓存)。对于 那些很少更新,但是希望更新发生时实时性高的客户端来说 是非常理想的。
11.
Doozer ● 最初由 Heroku
的工程师开发并开源 ● 轻量版 ZooKeeper ● 实现 Paxos 算法 “Skynet 服务都活在哪?”
12.
Skynet 怎么使用 Doozer
13.
整体架构
14.
服务 ● 接口 type ServiceDelegate
interface { Started(s *Service) Stopped(s *Service) Registered(s *Service) Unregistered(s *Service) } ● 调用原型 func (ri *skynet.RequestInfo, req interface{}, resp interface{}) error
15.
声明 ● 请求和响应 type MsgRequest
struct { Sender, Receiver, Data string } type MsgResponse struct { Code int } ● 服务 type MsgService struct { // 消息发送服务所需数据 }
16.
实现 func (s *MsgService)
SendMsg( ri *skynet.RequestInfo, req *MsgRequest, resp *MsgResponse) error { // 发送消息的代码 return err }
17.
主函数 func main(){
s := &MsgService{} config, _ := skynet.GetServiceConfig() config.Name = "MsgService" config.Version = "1" config.Region = "Development" srv := service.CreateService(s, config) defer srv.Shutdown() waiter := srv.Start(true) waiter.Wait() }
18.
客户端 config, _ :=
skynet.GetClientConfig() clt := client.NewClient(config) req = &MsgRequest {Sender: "user1", Receiver: "user2", Data: "Blablabla..."} resp = &MsgResponse{}
19.
客户端 srv := clt.GetService(
"MsgService", "1", "Development", "") if err := srv.Send(nil, "SendMsg", req, resp);err != nil { fmt.Println(err) } else { fmt.Println(resp.Code) }
20.
轻量分布式服务框架 ● 需要分布式、高可用的协调服务 ○
Zookeeper/Doozer/ESB ● 开放的通讯协议有助于跨语言的服务调用 ○ Protobuf/BSON/JSON/XML/SOAP ● 民主制负载均衡消除了裁判服务的单点隐患 ○ 服务端发布自身状态,客户端根据状态进行选择 ○ 民主带来的风险 ● 每个人都有自己的天堂 ○ Doozer, Skynet ○ Zookeeper, Norbert ○ MQ/Redis/Memcache...
21.
延伸阅读 1.
美国国家标准与技术研究院对云计算的定义 ○ http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf 2. 什么是 GAE ○ https://developers.google. com/academy/apis/cloud/appengine/intro/whatisgae 3. Norbert,LinkedIn 发布的基于 Zookeeper 的轻量分布式开源框架 ○ http://data.linkedin.com/opensource/norbert 4. ZooKeeper 之道 ○ https://cwiki.apache.org/confluence/display/ZOOKEEPER/Tao
Download