boot

package module
v0.0.0-...-015ad48 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 21, 2024 License: Apache-2.0 Imports: 0 Imported by: 0

README

#boot

一直想把这个框架开源,今天日子比较特别,正好也没事,整理一下代码,把一些陈年烂代码该删的都删了,然后从私有库转到github

Boot的核心服务启动器,最早的时候是作为微服务框架而设计的,但随着不同项目的应用和框架设计思想的影响下,不断不断的重构成为今天这样子。

首先这个框架比较简陋,以至于啥都没有,就只管启动服务,这有点类似IOC,但是又不太一样,因为boot把服务看成插件,每个插件提供自己独特的服务,很多插件组装起来对外就是一个独立的微服务。

当然,既然是微服务,有一些东西必须是标准化的,比如传输协议,服务发现,监控等

######关于服务协议

boot使用的是GRPC作为服务协议,当然,您也可以换别的协议,毕竟,RPC也只是一个插件而已。

######关于服务注册与发现

在plugin的两个包里面可以看到有discovery和register两个包,分别是发现和注册的实现

第一版使用了Etcd来支撑服务注册和服务发现,

第二版改为consul作为服务中心,同时兼容etcd作为服务发现中心,其实里面问题挺多的,只是没时间去改,好比熔断等,直到最近整体要迁移到kubernetes中,所以做了第三版改进

第三版为了适应k8s+service mash,所以回归了最原始的dns方式,由service Mash来控制服务的访问,熔断等,其实这一版我是最满意的一版,因为结构最简单了。 (ps:在做架构的时候我习惯把流程设计得复杂一些,但是实现要求一定要简单,不要绕,毕竟开发人员在代码实现与沟通过程中还那么绕的话,代码就别想写好。) 其实serviceMash就是要消灭代码中的服务发现与注册,从系统层面来保证服务的动态变更与调用,正好我也就顺其自然的没有使用服务注册,但是服务发现还有的,不过也只是对dns的简单封装,当然如果有谁有兴趣优化一下k8s的服务发现组件,欢迎提交rp

######关于插件化

各种通用的数据库处理,队列处理等可以实现plugin.Plugin,然后作为一个插件注入到服务中。可以套用以下模版来生成服务:


import (
  "context"
  "github.com/coffeehc/base/log"
  "github.com/coffeehc/boot/plugin"
  "go.uber.org/zap"
  "sync"
)

var service Service
var mutex = new(sync.RWMutex)
var name = ""
var scope = zap.String("scope",name)


func GetService()Service  {
  if service == nil{
    log.Panic("Service没有初始化",scope)
  }
  return service
}

func EnablePlugin(ctx context.Context)  {
  if name == ""{
    log.Panic("插件名称没有初始化")
  }
  mutex.Lock()
  defer mutex.Unlock()
  if service!=nil{
    return
  }
  service = newService(ctx)
  plugin.RegisterPluginByFast(name,nil,nil)
}


type Service interface {

}

func newService(ctx context.Context)Service  {
  xxx.EnablePlugin(ctx)
  impl := &serviceImpl{
    xxxService: xxx.GetService()
  }
  return impl
}

type serviceImpl struct {
  xxxService xxx.Service

}

框架已经处理好了插件调用依赖,所以不会重复创建插件,但实际为了保证不重复创建插件是以上模版来保证的,之所为没有集成到Plugin里面去,主要是因为这里的服务都是单例模式,如果有的插件遇到不能使用单例的场景,或者更个性化的需求的时候,就可以通过修改模版创建的代码来实现自定义,这样灵活度更高。

那么基本上这个框架就这样,已经算比较稳定的一个版本,既然开源了,以后就尽量向下兼容来升级框架,代码很简单也很容易看懂,如果大家有兴趣的话,可以开issus提建议或者直接点rp丢过来。

说实话,我倒是很希望有一天boot能被精简成百来行代码,服务被更细粒度化,一切插件都被服务化,被弱化成less Service或者镜像化,或者成为低代码平台的组件等其他形态,那boot将会真正成为一个启动器,它将是应用组装的最后那一公里。

README写的很粗糙,慢慢改善

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
component
grpcx/alts/internal/conn
Package conn contains an implementation of a secure channel created by gRPC handshakers.
Package conn contains an implementation of a secure channel created by gRPC handshakers.
grpcx/alts/internal/service
Package service manages connections between the VM application and the ALTS handshaker service.
Package service manages connections between the VM application and the ALTS handshaker service.
rpc

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL