SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
轻量分布式服务框架
 Skynet 分析与应用

                   邢星(mikespook)
            mikespook@gmail.com
              http://mikespook.com
        weibo & twitter @mikespook
云之神话

●   资源共享      ●   软件即服务(SaaS)
●   按需分配      ●   平台即服务(PaaS)
●   隔离抽象      ●   基础设施即服务(IaaS)
●   服务式使用     ●   ......(XaaS)
●   自助化/自动化
●   ......
我们有什么?

●   Google App Engine
●   Google Compute Engine
●   Amazon Web Service
●   Heroku
●   Openhift
●   DNSPod
●   监控宝
●   七牛云存储
●   ......
够了吗?

● 物理瓶颈——跨洲际、大延迟、不可控制
● 政策风险——被墙、支付困难、沟通不顺
● 历史负债——一个不可拆分的核心服务



    老板信任吗?
拍脑袋

● 租赁SaaS对外围功能进行支撑。
● 用 OpenStack 什么的,自建私有云……



      对于核心业务……
       这样有意义吗?
最终倒在了一个无法云化的核
   心业务系统上?
Brain Ketelson
● 一个巨大的代码单元实现的大应用,很难在不
  带来麻烦的前提下,对某些部分进行微小的修
  改。
● 更小的组件允许在不影响其他部分的前提下
  进行调整,也更容易通过增加服务器的方式增
  加更多的服务节点来提升系统容量。
新的问题

● 服务组件碎片化
● 服务总线成为瓶颈
● 管理单元带来的单点隐患
Skynet - 分布式服务框架

●   使用 Go 语言编写
●   用于在分布式应用中,同服务进行通讯
●   重度依赖 Doozer
●   无需管理节点,服务自我完备
●   开源,社区活跃
Doozer
用于存储小量、极端重要的数据,保证了高可用和完全一致
性。当数据变化时,它立刻通知接入的客户端(无缓存)。对于
那些很少更新,但是希望更新发生时实时性高的客户端来说
是非常理想的。
Doozer
● 最初由 Heroku 的工程师开发并开源
● 轻量版 ZooKeeper
● 实现 Paxos 算法



  “Skynet 服务都活在哪?”
Skynet 怎么使用 Doozer
整体架构
服务

● 接口
type ServiceDelegate interface {
    Started(s *Service)
    Stopped(s *Service)
    Registered(s *Service)
    Unregistered(s *Service)
}
● 调用原型
func (ri *skynet.RequestInfo,
    req interface{},
    resp interface{}) error
声明
● 请求和响应
type MsgRequest struct {
    Sender, Receiver, Data string
}
type MsgResponse struct {
    Code int
}
● 服务
type MsgService struct {
    // 消息发送服务所需数据
}
实现
func (s *MsgService) SendMsg(
    ri *skynet.RequestInfo,
    req *MsgRequest,
    resp *MsgResponse) error {
    // 发送消息的代码
    return err
}
主函数
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()
}
客户端
config, _ := skynet.GetClientConfig()
clt := client.NewClient(config)
req = &MsgRequest {Sender: "user1",
    Receiver: "user2", Data: "Blablabla..."}
resp = &MsgResponse{}
客户端
srv := clt.GetService(
    "MsgService", "1", "Development", "")
if err := srv.Send(nil,
    "SendMsg", req, resp);err != nil {
    fmt.Println(err)
} else {
    fmt.Println(resp.Code)
}
轻量分布式服务框架

● 需要分布式、高可用的协调服务
 ○ Zookeeper/Doozer/ESB
● 开放的通讯协议有助于跨语言的服务调用
 ○ Protobuf/BSON/JSON/XML/SOAP
● 民主制负载均衡消除了裁判服务的单点隐患
 ○ 服务端发布自身状态,客户端根据状态进行选择
 ○ 民主带来的风险
● 每个人都有自己的天堂
 ○ Doozer, Skynet
 ○ Zookeeper, Norbert
 ○ MQ/Redis/Memcache...
延伸阅读

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

Weitere ähnliche Inhalte

Ähnlich wie 轻量分布式服务框架

使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统Frank Xu
 
Parse, cloud code 介紹
Parse, cloud code 介紹Parse, cloud code 介紹
Parse, cloud code 介紹wantingj
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)锐 张
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境drewz lin
 
Yog Framework
Yog FrameworkYog Framework
Yog Frameworkfansekey
 
Lean Message Architecture Highlights
Lean Message Architecture HighlightsLean Message Architecture Highlights
Lean Message Architecture Highlightssunng87
 
LeanMessage 实时通信云架构
LeanMessage 实时通信云架构LeanMessage 实时通信云架构
LeanMessage 实时通信云架构wenny yuan
 
CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)Chengjen Lee
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案Ady Liu
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)Zhaoyang Wang
 
纵览Loadrunner核心功能
纵览Loadrunner核心功能纵览Loadrunner核心功能
纵览Loadrunner核心功能beiyu95
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 
Zh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceZh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceTrendProgContest13
 

Ähnlich wie 轻量分布式服务框架 (20)

使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
Parse, cloud code 介紹
Parse, cloud code 介紹Parse, cloud code 介紹
Parse, cloud code 介紹
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
 
Yog Framework
Yog FrameworkYog Framework
Yog Framework
 
Lean Message Architecture Highlights
Lean Message Architecture HighlightsLean Message Architecture Highlights
Lean Message Architecture Highlights
 
LeanMessage 实时通信云架构
LeanMessage 实时通信云架构LeanMessage 实时通信云架构
LeanMessage 实时通信云架构
 
Mvc
MvcMvc
Mvc
 
Glider
GliderGlider
Glider
 
CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案
 
Micro service
Micro serviceMicro service
Micro service
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)
 
纵览Loadrunner核心功能
纵览Loadrunner核心功能纵览Loadrunner核心功能
纵览Loadrunner核心功能
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
Zh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceZh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduce
 

Kürzlich hochgeladen

函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptxNCU MCL
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_patternJamie (Taka) Wang
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptxNCU MCL
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxNCU MCL
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】黑客 接单【TG/微信qoqoqdqd】
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptxNCU MCL
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxNCU MCL
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLPJamie (Taka) Wang
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptxNCU MCL
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven designJamie (Taka) Wang
 

Kürzlich hochgeladen (15)

函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_pattern
 
20161027 - edge part2
20161027 - edge part220161027 - edge part2
20161027 - edge part2
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
 
20151111 - IoT Sync Up
20151111 - IoT Sync Up20151111 - IoT Sync Up
20151111 - IoT Sync Up
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP
 
20200323 - AI Intro
20200323 - AI Intro20200323 - AI Intro
20200323 - AI Intro
 
20200226 - AI Overview
20200226 - AI Overview20200226 - AI Overview
20200226 - AI Overview
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven design
 
Entities in DCPS (DDS)
Entities in DCPS (DDS)Entities in DCPS (DDS)
Entities in DCPS (DDS)
 

轻量分布式服务框架