或许我可用夏日把你来比方,
但你比夏日更可爱也更温良。
夏风狂作常摧落五月的娇蕊,
夏季的期限也未免还不太长。
......
只要人眼能看,人口能呼吸,
我诗必长存,使你万世留芳。
——莎士比亚 十四行诗 第18首
五月,像是一个最温柔的笑
没有盛夏时的炎炎浮躁与慵懒
温和而不疏淡,热烈但不拘束
Apache ServiceComb | 精选
文章的开头引用了莎士比亚的一首诗。
在这雨晴梅子肥的季节里,小蜜蜂给大家带来新一期的精选动态~
Apache ServiceComb 致力于帮助企业、用户和开发者将企业应用轻松微服务化上云,并实现对微服务应用的高效运维管理。
进展动态
1.开了新项目servicecomb-Kie
(分布式系统配置工具,实现云原生分布式系统配置中心)
https://github.com/apache/servicecomb-kie
2.开了新项目servicecomb-fence
(微服务认证鉴权工具,实现OAuth和OpenID connect协议,兼容Spring security用户API)
https://github.com/apache/servicecomb-fence
3.ServiceComb的服务中心正在设计和开发一个Syncer工具
Syncer地址:
https://github.com/apache/servicecomb-service-center/tree/master/syncer
Syncer的更多介绍:
https://github.com/apache/servicecomb-service-center/blob/master/syncer/README-ZH.md
Syncer的未来要处理的事情(不断更新中):
https://github.com/apache/servicecomb-service-center/blob/master/syncer/TODO-ZH.md
FAQ| 精选问答
Q1
有个疑问,能否解答一下,当我使用spring boot集成servicecomb的时候,springboot的启动和servicecomb初始化完成有没有什么关系
A:servicecomb是spring boot启动的一部分,servicecomb也是一系列的applicationlistener
Q2
请问,在我的rpc接口里面,当消费者调用我的微服务时,我可以知道是哪个消费者调用的吗?并且获取对端微服务的微服务名?
A:上游的consumer服务调用下游的provider服务时,会在InvocationContext 中设置一个 x-cse-src-microservice 表示请求是从哪个服务发出的。你可以通过这个来判断。
Q3
开发者,qps-flowcontrol-provider通过这个配置限流时,测试发现单独请求微服务时,限流时生效的,但通过edge网关请求微服务接口时,这个限流并不起作用,这个是什么原因呢?
A:指定了服务级限流策略啊?浏览器直接访问后端服务的话请求算在default里面,通过edge调用后端服务的话,请求算在了edge服务的头上
Q4
Servicecomb能编写默认执行的handler吗?
A:请参考:
https://docs.servicecomb.io/java-chassis/zh_CN/references-handlers/intruduction.html
也可以试试HttpServerFilter:
https://docs.servicecomb.io/java-chassis/zh_CN/general-development/http-filter.html
使用REST的情况下,这个一定是在handler之前执行的。
Q5
我看文档中说transport-highway模式,仅用于java之间互通。如果我客户端是使用C语言写的,想连接基于servicecomb开发的tcpserver是不是无法正常通信?
A:理论上不限于java,但是protobuf based on protostuff不是个标准的protobuf,这个就局限性有点高了,2.0种将改为标准protobuf
REST(HTTP+json)标准,简单,比较适合各种语言实现,一般都有对应的库。
Q6
普通的微服务新增新的接口,重启服务,edge服务也要跟着再重启才能生效,我觉得这挺不好的,不能edge服务就不要重启吗?edge服务都重启了,那好像就不能算真正的弹性扩展了,但重启了edge服务,对外服务不是都停止了?
A:微服务版本号升级了的话,edge不用重启,不做任何控制时,平等对待
例如:
v1,有op1/op2
v2,有op1/op2/op3
如果调op1/op2,则v1/v2的实例都使用
如果调op3,会只使用v2实例
另外,可以控制版本的使用规则,可以指定只调latest,或是a url走规则1,b url走规则2
op级的控制,是自动的,不需要干预
versionRule需要控制
可参考以下文档中的“设置兼容规则”:
https://docs.servicecomb.io/java-chassis/zh_CN/edge/by-servicecomb-sdk.html
Q7
使用0.0.0.0:8080注册到service-center,每个服务的地址都是虚拟网卡的地址,怎么才能分配服务所在的本机的IP地址?
A:这个过程是随机选择的发布地址。 可以修改的。
参考文档:
https://docs.servicecomb.io/java-chassis/zh_CN/build-provider/listen-address-and-publish-address.html
Q8
api first是不是用swagger editor编辑yml(符合openApi规范),导出之后,再加入业务层的接口包,然后实现controller?
A:可以先写接口代码。写swagger也行,还需要工具将yaml生成代码项目。需要工具链支持。
Q9
请问一下:
1、使用RPC\RestTemplate 调用服务怎么指定服务版本?
2、使用其他网关(如zuul)如何转发到指定版本的服务?
A:1.请参考⤵️
https://docs.servicecomb.io/java-chassis/zh_CN/build-consumer/with-contract.html
2.zuul的话得自己改路由规则
Q10
使用0.0.0.0:8080注册到service-center,每个服务的地址都是虚拟网卡的地址,怎么才能分配服务所在的本机的IP地址呢?
A:这个过程是随机选择的发布地址。 可以修改的。
参考⤵️
https://docs.servicecomb.io/java-chassis/zh_CN/build-provider/listen-address-and-publish-address.html
Q11
rpc风格的方法重载有考虑做支持吗?
有考虑彻底支持下rpc的重载吗?
servicecomb版本:1.2.0,rpc方式下方法重载的两个bug
1 提供方重载方法,在按参数对象生成契约时,生成的swagger中ref值,取方法名+ body会冲突
2 不支持使用提供方接口调用
A:考虑到openapi每个接口都有唯一的operation id, 还是不太建议这么使用。 内部实现使用重载是可以理解的,外部发布接口的时候,需要避免,可以将内部的设计包装起来就可以了。 没必要强制得使用重载。
getUserByX, getUserByY, 这样的接口感觉比getUser(X) getUser(Y)语义上更加直观一些。
Q12
最大并发数, sprint boot自带tomcat里有设置。 ServiceComb 里会有最大并发的设置吗?
A:servicecomb稍微复杂点,如果运行时是tomcat或者springboot带的tomcat,直接配置tomcat即可。如果是vertx容器,可以看下开发指南的配置项。
https://docs.servicecomb.io/java-chassis/zh_CN/index.html
社区 | 总结
很多开发者都反馈ServiceComb没提供认证鉴权服务的支持,自行开发代码量很大,或者必须使用spring security提供的原生能力
参考:
https://github.com/huaweicse/cse-java-chassis-samples/tree/master/springboot-oauth2-sample
但是原生能力少了很多ServiceComb自身的特性, 集成非常不友好。
开发人员做了一个适用于微服务的JWT/OAuth2认证项目原型,专为ServiceComb打造。目前已经完成了最基础的过程验证和开发,以及项目的自动化测试。
参考:
https://github.com/apache/servicecomb-samples/tree/master/authentication
感兴趣的点个赞,支持把原型项目做成一个正式的ServiceComb项目。(熟悉这个项目,需要先了解spring security和oauth2)
关于maven
maven提供的dependency mangement机制,依赖关系可能由于某一个新组建的加入或者移除发生大量变化。
有些pom依赖示例,可以参考下:
https://github.com/apache/servicecomb-samples
后续计划
好消息,我们的新项目已经开始了
欢迎大家贡献代码
如何贡献代码
⬇️ ⬇️ ⬇️
https://servicecomb.apache.org/cn/developers/contributing
如果想了解我们的最新动态,各种任务都在jira里跟踪,那个比较全
也可以订阅下[email protected],大家有新的idea,都会通过mailing list进行讨论。有好的想法和建议也可以发起邮件讨论
精彩回顾
2019.05.06 北京
恰逢QCon十周年,QCon(全球软件开发大会)2019北京站在北京国际会议中心拉开帷幕。来自华为云的五位专家在“AI与云原生实践”华为云专场论坛中发表精彩演讲。这也是华为云首次以专场形式亮相全球软件开发大会。
活动预告
2019.6.25 QCon上海站
地点:上海世博中心
KubeCon + CloudNativeCon论坛将所有CNCF项目汇聚在一个屋檐下。与开源云原生社区的技术领袖们一起加入此论坛,以进一步推动云原生计算的发展。
开源峰会,前身为LinuxCon + CloudOpen + ContainerCon China(LC3),汇集了技术专家和开源行业领导者,使其共同合作,分享信息,了解最新、最有趣的开源技术,包括Linux、IoT、区块链、AI,网络和更多。
6月24日是会前同场活动 + 快闪演讲
6月25-26日是论坛
报名链接:
https://events.linuxfoundation.cn/events/kubecon-cloudnativecon-china-2019/register/
END
文
末
小
结
我们专注于开源
更希望有更多爱好者学习到微服务
同时也欢迎大家加入到我们的开发队伍
为我们贡献代码,成为commiter
欢迎扫码加入进微信群
有什么疑问可以提issue到github上
我们会及时为你解答~
小蜜蜂提前祝大伙儿端午节快乐!?
期待志同道合的你
用心做开源/不忘初衷
了解更多信息请访问:
官方网站↓↓↓
http://servicecomb.apache.org/
Github代码仓库↓↓↓
https://github.com/apache?q=ServiceComb
点击“阅读全文”给ServiceComb点star!