微服务架构实践(服务框架)
我的微信公众号:周小叨
我的个人微信:xxx110vvv
欢迎关注留言交流
目标
高性能
性能高是必须的,对于创业公司来说,不停的堆机器也是一个比较大的成本,能省则省。
资源拆分隔离
对资源进行拆分,需要每个服务提供相应的接口,服务之间不能直接访问其他服务的数据库或者缓存。
高可用
暂定目标是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
}
相关文章