微服务是一种思想,与编程语言无关,编程语言是思想下具体的一种实现方式,怎么设计架构方案和实现主要看主要面临的业务场景。
(资料图)
主站核心业务使用的是yaf(php)开发的,要实现k8s + x编程语言 自主微服务实现,受到陈皓(左耳听风)的影响,我选用的编程语言是Go,Go语言有更强大的生态,有谷歌,k8s作为强大的后盾,摸着石头过河。
提到微服务我们就联想到Rpc,主流微服务价格设计,微服务之间的调用都使用Rpc,微服务也有直接用http实现的,Rpc限制了开发时候的灵活性和兼容性,主要3点原因:
1.Http协议是实际通信的标准,灵活性和兼容性得到了很好的市场验证,对Rpc我抱有怀疑态度,在Api层进行权限的统一认证( Token/Cookies ) , 后期微服务体系成熟,可以统一接入Api网关服务,Api网关服务是不可缺少的,全使用Nginx反向代理的方式,再数据统计的角度上局限性。
2.控制异常,如果发生异常,Rpc服务挂掉或者遭到网络攻击/刷请求,请求会直接打到Rpc上,如果有网关层,可以在Redis中加Redis锁,把无效的网络请求进行隔离。
拆分微服务最大的两个问题是数据的一致性和性能,系统性能的瓶颈主要是因为计算机Cpu,内存(memory/内存条、cache/Cpu的内存) 是非常快的,所有的性能问题大同小异,磁盘I/O往往才是性能的瓶颈。
1.数据的一致性的解决办法
模块化拆分和迁移微服务功能,把涉及到的整块进行迁移,可以按比重分流/整体功能进行,按比重分流要保留新旧数据的兼容,需要双写,现在的有声业务体量小,可以整块整块的迁移。
2.性能:有声的数据量非常小,暂时不使用redis缓存可能也不会造成什么性能问题,所以我把很小的公共部分进行了缓存,主要考虑C端用户的体验。
Go-zero这个框架使用goctl工具开发速度非常高效,对调用外部的Grpc服务需要做更多的兼容,这里做一个解释说明,protoc-gen-go
、protoc-gen-go-grpc
这两个工具是protobuf的工具,是Go 1.5
版本后新加的,这个地方饶了好大一圈。
GitHub Demo 地址 : https://github.com/grpc/grpc-go
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
在有声微服务中,是调用UserRpc的权限验证部分,Go-zero不支持,所以自己写了一些兼容包。
1.首先pb文件生成Pb和Grpc文件
$ ll-rw-r--r-- 1 stark staff 69K 3 20 15:51 cp_user_internal.pb.go-rw-r--r-- 1 stark staff 34K 3 20 15:51 cp_user_internal_grpc.pb.go
2.调用UserRpc服务,需要实现的包是客户端部分代码,本地需要TLS加密,服务才能被调用的到,grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
是TLS灵魂。
package clientfunc Auth(Session string, Action string, Controller string, Param string) bool { // 1.建立链接 flag.Parse()conn, err := grpc.Dial("testing.gongzicp.com:1443", grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))if err != nil {log.Fatalf("did not connect: %v", err)}defer conn.Close()client := pb.NewUserInternalClient(conn)//2.验证管理员权限resp, err := client.AdminMid(context.Background(), &pb.UserInternalParams_AdminMidReq{Session: Session,})//3.验证菜单权限auth, err := client.AdminAuth(context.Background(), &pb.UserInternalParams_AdminAuthReq{Action: Action,Controller: Controller,Param: Param,Session: Session,})//....}
1.有声服务和主站的关联非常小,但是也有关联NovelId获取信息的部分,Novel属于核心服务,可能每一个地方的需要都不少。
2.Web端(Ukey) 、App安卓/Ios(Token) 本质上是一个维度的东西,类型上应该只用户/和系统管理员2种类型,最好是把服务类抽离出来做成单独的服务,可能会更好一些。
标签:
发展好银发经济,既能提高老年人生活和生命质量,也是促进经济发展、增
9月5日一大早,方山县马坊镇四皓村安全管理员孙金全就开始了一天的工作
00:539月6日,走失了12年的小董终于在陕西华阴老家和父母团聚。2011年
9月8日,中国政府网刊发了交通运输部对网民关于“敬老交通卡能否全国统
9月8日上午杭州第19届亚运会火炬传递在杭州西湖涌金公园广场启动火炬手
1、1:四人寝;2:卫生条件可以,比较干净;当然自己也得爱卫生,不管
9月8日长白山召开中报业绩说明会,2023上半年公司实现营收1 68亿元,同
北京时间9月8日,沙特媒体消息,在引入费利佩后,吉达联合将今夏花费月
9月4日至6日,2023中国国际化工展览会(ICIFChina)在上海举行,延长石
中国商务新闻网是商务部国际商报社主办,国家互联网信息办公室批准的国
2023年9月8日晶升股份(688478)发布公告称东吴证券(601555)、招商基金
刚满10天的婴儿患病紧急就医途中被困高速隧道危急时刻安康高速交警迅速
美媒LeBronFactory发文道:勒布朗即将开启他在湖人生涯的第六个赛季;
大河网讯近日,农业农村部农产品质量安全中心发布《2023年第二批全国名
中新网9月7日电综合报道,继英国3月宣布向乌克兰提供贫铀弹后,美国五
一、区分邻接权和著作权的关键特征有哪些著作权和著作邻接权的区别:1
今年以来,龙门县纪委监委念好“敲、护、强、树”四字诀,运用党内谈话
南方财经9月1日电,傲农生物在互动平台回复称,因近期原料价格上涨,公
1、诞生背景:SEDEX是一家总部设在英国伦敦的非赢利组织,世界上任何地
8月31日,有网友反映,洛阳市东方人民医院(河南科技大学第三附属医院
X 关闭
X 关闭