关于微服务架构图与transfer service

来源:10-1 基于Docker部署服务注册发现中心consul集群

MichaelZENG

2019-11-29

  1. 如图,在架构图中,download和upload是通过accountservice来验证token的,但是在实际代码中,Authorize是在apigw里面的,是不是有点不匹配?
    图片描述
  2. 在filestore-server/service/transfer/main.go里面:
func startRPCService() {
	service := micro.NewService(
		micro.Name("go.micro.service.transfer"), 
		micro.RegisterTTL(time.Second*10),      
		micro.RegisterInterval(time.Second*5), 
		micro.Flags(common.CustomFlags...),
	)
	service.Init(
		micro.Action(func(c *cli.Context) {
			mqhost := c.String("mqhost")
			if len(mqhost) > 0 {
				log.Println("custom mq address: " + mqhost)
				mq.UpdateRabbitHost(mqhost)
			}
		}),
	)
	/*******************************************/
	//为什么要在transfer里面Init dbproxy,有什么讲究吗
	/*******************************************/
	dbproxy.Init(service)

	if err := service.Run(); err != nil {
		fmt.Println(err)
	}
}

在filestore-server/service/dbproxy/client里面:

func Init(service micro.Service) {
	//这里为什么要用transfer创建的service,好像直接一个空的NewService也可以?
	//因为只需要Client呀?
	dbCli = dbProto.NewDBProxyService("go.micro.service.dbproxy", service.Client())
}
写回答

2回答

xiaomo

2019-11-29

同学你好,关于第一个问题,这里的确没有实现完整的逻辑,多谢指出。准确来说,无论是apigw, 还是upload, download这些服务的访问,都是需要经过验证的(除了一些本身不需要安全认证的接口,比如注册)。所以对于apigw,实际也是要通过rpc来访问accountservice来校验访问的有效性。accountservice作为全局的认证中心的角色而存在。已有计划根据同学们的反馈做课程的后续补充,可能会新增一些章节,敬请关注。

0
0

MichaelZENG

提问者

2019-11-29

关于第二个问题,好像按照代码里面的逻辑的话,所有需要操作数据库的function call都是使用的transfer的service.client()呀?好像。。。有点奇怪?

是不是说明UserService, Download, Upload, Transfer用的都是同一个micro,Service客户端来访问dbproxy? 这样不会造成拥堵吗?

0
4
xiaomo
回复
MichaelZENG
3. 这是两个独立的微服务呢,upload, transfer, 两个微服务各自初始化mq,用于创建与mqserver之间的链接。那么就可以实现一方发布/订阅信息,另一方订阅/发布信息。
2019-11-29
共4条回复

Go实战仿百度云盘-实现企业级分布式云存储系统

紧随“云时代”技术潮流,分布式云存储系统,做第一代云程序员

1077 学习 · 494 问题

查看课程