美文网首页微服务架构微服务
微服务架构实践(服务框架)

微服务架构实践(服务框架)

作者: 19661f3e9b6c | 来源:发表于2018-07-12 12:10 被阅读58次

    目标

    高性能

    性能高是必须的,对于创业公司来说,不停的堆机器也是一个比较大的成本,能省则省。

    资源拆分隔离

    对资源进行拆分,需要每个服务提供相应的接口,服务之间不能直接访问其他服务的数据库或者缓存。

    高可用

    暂定目标是99.9的可用性。

    开发语言

    由于我们的新项目没有历史包袱,所有的模块都是重新开发,所以我们可以自由地选择开发语言和开发框架。以前我们的项目后端开发语言比较杂,有golang的项目,php的项目,还有一小部分是nodejs的项目。新项目我决定统一后台开发语言,选择golang作为我们的主力后端开发语言。golang在我们这里主要有以下优势:

    • golang在性能和开发效率上有很好的平衡,语法上很简单,并发编程简单高效,基础库健全。
    • 自带一些pprof包可以profile当前程序的CPU消耗、内存占用、锁状态、channel阻塞等,非常便利我们定位问题。
    • 对PHP程序员来说,上手更容易,而且性能好很多。

    服务框架

    对于一般的中小型创业公司而言,自己去开发一个微服务框架相对而言成本就太大了(土豪公司养了一堆闲人的除外)。
    经过对比,我们选用Go Micro作为开发框架,因为里面包含几乎所有微服务组件,并且支持非常好的拓展性,通过接口的设计方式,让我们可以拓展一些自己的组件,比如服务发现、传输协议、配置中心等。

    Go Micro是一个插件化架构,专注于提供底层的接口定义和基础工具,这些接口可以接纳各种实现。
    举个例子,比如下面是Registry接口:

    type Registry interface {
        Register(*Service, ...RegisterOption) error
        Deregister(*Service) error
        GetService(string) ([]*Service, error)
        ListServices() ([]*Service, error)
        Watch(...WatchOption) (Watcher, error)
        String() string
        Options() Options
    }
    

    Registry接口定义了服务发现的接口,默认采用了consul作为服务发现的实现,但也可以采用其他实现比如etcd和zookeeper等,只要能满足接口,就可以使用。插件化的架构意味着如果你想替换底层的实现,你不需要修改任何底层的代码。


    micro-framework.png

    Go Micro主要由以下组件构成:

    Registry

    提供服务注册、发现、注销、监测机制,注册中心默认是consul,可通过插件的形式支持etcd2/3、zookeeper等

    Selector

    选择器提供了负载均衡,可以通过过滤方法对微服务进行过滤,并通过不同路由算法选择微服务等。

    Transport

    微服务间同步请求/响应通信方式,如http、grpc、tcp、udp等

    Broker

    微服务键异步发布/订阅通信方式,更好的处理分布式系统解耦问题,默认使用http方式,生产环境通常会使用消息中间件,如Kafka、NSQ等。

    Codec

    服务间消息的编解码,支持json、protobuf、bson、msgpack等。

    Server

    用于启动服务,为服务命名、注册Handler、添加中间件等。

    Client

    提供微服务客户端。

    我们将会基于Go Micro进行了二次开发,拓展一些自己的组件,比如配置中心,日志收集,APM调用链,监控数据收集等。

    未完待续

    我的微信公众号

    qrcode_for_gh_e51d4037d8fa_430.jpg

    相关文章

      网友评论

        本文标题:微服务架构实践(服务框架)

        本文链接:https://www.haomeiwen.com/subject/thglpftx.html