Skip to main content

One post tagged with "Apache ShenYu"

View All Tags

· One min read

Google Summer of Code & Apache ShenYu springcloud e2e task is coming | Invite you to explore the high performance gateway

Description

Shenyu is a native API gateway for service proxy, protocol translation and API governance. but Shenyu lack of End-To-End Tests.

Relevant skills:

  • Understand the architecture of ShenYu
  • Understand SpringCloud micro-service and ShenYu SpringCloud proxy plugin.
  • Understand ShenYu e2e framework and architecture.

How to coding

  • please refer to org.apache.shenyu.e2e.testcase.plugin.DividePluginCases

How to test

  • start shenyu admin in docker
  • start shenyu boostrap in docker
  • run test case org.apache.shenyu.e2e.testcase.plugin.PluginsTest#testDivide

Task List

  1. develop e2e tests of the springcloud plug-in.
  2. write shenyu e2e springcloud plugin documentation in shenyu-website.
  3. refactor the existing plugin test cases.

Design and implement shenyu ingress-controller in k8s

Background

Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance. Currently, ShenYu has good usability and performance in microservice scenarios. However, ShenYu's support for Kubernetes is still relatively weak.

Tasks

  1. Discuss with mentors, and complete the requirements design and technical design of shenyu-ingress-controller.
  2. Complete the initial version of shenyu-ingress-controller, implement the reconcile of k8s ingress api, and make ShenYu as the ingress gateway of k8s.
  3. Complete the ci test of shenyu-ingress-controller, verify the correctness of the code.

Relevant Skills

  1. Know the use of Apache ShenYu
  2. Familiar with Java and Golang
  3. Familiar with Kubernetes and can use java or golang to develop Kubernetes Controller

· One min read

Introduction of new Committer

Hello everyone, my name is Shuo Li , java architect, currently engaged in a big-sized Internet company, It is my honor to be invited by the Apache ShenYu community as the Committer. Let me share with you my first meet, acquaintance, understanding, growth and suggestions with the Apache ShenYu community.

Meet the Apache Shenyu community for the first time

The story starts from 2020. In the early stage, I used SpringCloud Gateway + Nacos Config Event to realize the dynamic routing of gateway by myself. Because there was no dashboard of Gateway at that time, it was very painful. My team made a dashboard based on Micro Enterprise, which has a lot of functionality and limitations. From then on, I started to pursue a good gateway. One day, I found ShenYu, and saw that ShenYu's overall architecture was in sharper contrast to SpringCloud Gateway. ShenYu outperforms Gateway in terms of overall architecture design, function design, plug-in design, etc. ShenYu can be said to be the next generation gateway product. After that, I started to have a certain understanding of Apache ShenYu from building environment to running example project, and then to read plug-in chain and data synchronization, SPI mechanism and other source code.

Start submitting PR

It was not until January 2022 that I started to submit my first PR, which was to fix a problem that caused null Pointers when the Admin module started the default load instance. The function was small, but its significance was remarkable. It meant that I had a good start on the open source road from learning to contributing.

Ongoing open source contributions and gains

So far, I have participated in the open source of Apache ShenYu community for more than half a year, contributing a lot and growing and harvesting a lot. The details are as follows:

  • Witnessed Shenyu graduate from Apache Incubator and become a top Apache project.
  • Fixed ShenYu admin starting null pointer problem.
  • Added ShenYu Rewrite plugin support for PathVariable functionality.
  • Responsible for the functional support of the entire Shenyu-Client-Golang project.
  • Participated in the repair of some discovered problems, integration test writing, code of other CR contributors, corresponding functional documentation writing, etc.

Thanks to the community

Thanks to my friends who helped me or inspired me for free (in no particular order): yu199195,yonglun,luoxiaolong,lianjunwei,gaohan.

A little advice for newcomers

1.Be sure to check out the website or Github first 2.Follow the official website or project documents to try to run the relevant functional modules of Example 3.Feel free to submit an issue to the community if you have any ideas

Attend ShenYu biweekly meetings to keep up with the community and meet with developers one-on-one to ask questions

How to join Apache ShenYu

  1. How to become a Contributor

    The Apache ShenYu community has purposely written a very comprehensive Contributor Guide

  2. Github Issues

  3. Subscribe emails

    Email dev-subscribe@ShenYu.apache.org;

    After the sending is successful, you will receive a reply from dev-subscribe@ShenYu.apache.org, please reply to this email according to the prompt of the email to confirm the subscription;

    After replying to confirm, you will receive a welcome email indicating that you have successfully subscribed to emails.

· One min read

个人介绍

大家好,我是何凤恩 ,目前从事Java开发,非常荣幸在受邀成为Apache ShenYu社区的Committer,下面跟大家分享一下我参与Apache ShenYu社区这段时间的成长和建议。

初识ShenYu网关

最早接触shenyu在2021年3月左右,当时还叫soul,由于部门业务场景需要统一网关的使用,选择shenyu网关的主要原因是shenyu的插件化设计很符合我们所需的场景,当时主要使用的一些功能插件包括divide、sentinel熔断、ratelimiter、公司内部rpc的协议转换以及log2Mongo等。随着shenyu的不断升级发版,我们也在不断地升级我们的代码。

初次看到shenyu的代码时,我和大多数开发者一样都遇到这样几个问题:响应式编程到底是什么?响应式编程到底怎么写才对?shenyu的代码怎么会这么写呢?带着这些疑问,我阅读了很多遍shenyu的源码,然后自己调试shenyu,查看shenyu对于请求的处理以及各个插件的具体逻辑。再此期间也曾在shenyu的社区提过很多issues,感谢shenyu社区给予我的帮助。

开源之路

初次向shenyu提交代码还是在2022年3月,当时主要是在使用rpc进行协议转换时发现请求体丢失数据,然后发现是由于rpc参数转换插件丢失了数据,于是我第一次向shenyu提交了该bug的解决代码。

在后续的持续贡献中,主要是贡献了如下功能:

  • springboot的升级改造
  • springcloud插件的重构
  • cache插件的重构
  • logging模块以及各个logging插件的重构
  • shenyu官网插件文档的重构

感谢社区的朋友们

在此特别感谢各位帮助过我的伙伴们(排名不分先后):yu199195,qicz,li-keguo,dragon-zhang,renzhuyan,hutaishi,impactCn,yunlongn。

对于开源开发者的话

开源开发其实一件很有意义又很痛苦的事,很考验一个人的耐力,在无数的pr之后,可能会因为某些困难、问题放弃,而坚持下来的人,无论在技术还是沟通能力上,亦或者开源贡献上,都会有一定的收获。

开源不是一味的做任务,也不是被固定在某一个项目、某一个任务,而是你有空就可以参与任何一个项目。一个人获取会很快,但一群人会走的更远!

如何参与ShenYu

1.ShenYu在官网提供很全面的贡献者指南,https://shenyu.apache.org/zh/community/contributor-guide

2.如果你想参与shenyu的功能开发和问题修复,可关注shenyu的github issues,https://github.com/apache/shenyu/issues

· One min read

新晋Committer介绍

大家好,我是鄢仁柱 ,目前在微众银行做java/大数据业务开发。非常荣幸受邀成为Apache ShenYu社区的Committer,作为一名业务开发人员,平常关注点更多是在业务上,然后去写CRUD,而参与Apache Shenyu社区开源,让我有别样体验,更多关注点是放在代码本身,考虑如何支持各种协议、插件拓展、数据同步等。下面跟大家分享一下我参与Apache ShenYu社区这段时间的成长和建议。

初识Apache Shenyu社区

故事时间线还得回到2020年底开始说起,当时部门为了让我们能更好的成长,给我们报名了极客时间的JAVA进阶训练营,也就是在这个训练营里有幸结识了猫大人,在猫大人读源码活动的带领下,我第一次接触到了Apache Shenyu,当时还没进入Apache孵化器,还叫Soul(下面都称Apache Shenyu)。读Apache Shenyu源码活动,总共持续三周,在三周里我们每天读源码、写博客,从搭环境到跑示例工程,再到读插件链及数据同步等源码,收获巨大,对Apache Shenyu也有了一定的了解。

开始提交PR

一直到2021年5月份,我开始提交了我的第一个pr,当时是给Admin模块添加了一个单元测试,功能很小,但它的意义却是非凡的,它意味的我从学习开始到贡献,从自己玩开始到开源,在开源之路上有了一个很好的开始。

持续的开源贡献与收获

到目前为止,参与Apache Shenyu社区开源已有一年多一点时间,贡献了许多,也成长收获了许多。具体如下:

  • 参与soul迁移至Apache孵化器,并改名为Apache Shenyu。
  • 参与各模块单元测试的编写。
  • 负责整合TarsResponsePlugin,GrpcResponsePlugin,SofaResponsePlugin,DubboResponsePlugin等重构为ResponsePlugin统一处理。
  • 负责Admin Oracle数据库的支持。
  • 负责Shenyu网关实例注册到Consul的支持。
  • 参与一些已发现问题的修复、示例工程编写、jar包替换及升级、集成测试编写等。

感谢社区小伙伴

感谢无偿帮助过我或给过我启发的小伙伴(排名不分先后):yu199195,dragon-zhang,li-keguo,qicz,moremind,zouchangfu,lianjunwei

给新人的一点建议

Apache Way有个理念:社区大于代码,坚信健康的社区比好的代码更重要。这一年多参与下来也让我感受到了Apache Shenyu社区这一点践行的非常好,双周会议、任务遵从共识自愿、社区公开透明、小伙伴们热心帮助等。所以今天同样将这句话送给新人,社区大于代码,在这里,你都可以试一试。

如何参与Apache ShenYu

  1. 如何成为贡献者

    Apache ShenYu社区特意写了非常全面的贡献者指南

  2. Github Issues

  3. 订阅邮件

    dev-subscribe@ShenYu.apache.org 发送一封邮件;

    发送成功后,您会收到来自 dev-help@ShenYu.apache.org 的回信,请按照邮件的提示回复这封邮件,确认订阅;

    在回复确认后,您会收到一封欢迎邮件,表示您已经成功订阅了邮件。

· One min read

新晋Committer介绍

大家好,我是张子成 ,java/rust开发者,目前在某中型互联网公司从事中间件开发,工作方向包括网关/RPC/MQ。非常荣幸受邀成为Apache ShenYu社区的Committer,下面跟大家分享一下我与Apache ShenYu社区的相遇、相识、相知、成长和建议。

相遇

2021年8月中旬的时候,我加入现公司,转型为中间件开发(在上家做业务开发),接到的第一个任务就是尽快熟悉公司的网关中间件,于是一款叫Soul的网关进入了我的视野(Soul是ShenYu的前身,ShenYu于2021年进入了Apache孵化器,以下的Soul/ShenYu都指代Apache ShenYu(incubating))。

相识

在经过大概一周的学习后,我对Soul的主链路有了一定程度的认识。在后续2-3个月的时间里,随着不断地帮公司业务开发回答/解决问题,慢慢地我也发现了一些Soul不符合人体工程学的地方。

直到2021年12月的时候,出于公司需要和个人兴趣,我开始着手调研ShenYu,并考虑升级方案,此时才算真正开始接触ShenYu和社区。

相知

ShenYu是一个异步的,高性能的,跨语言的,响应式的API网关,其坚持插件化、全链路异步化的设计理念,目前已经集成了很多插件供用户选择,如果已有插件不满足需求,可以对着官网文档 自己上手做定制化开发。

ShenYu社区是活跃的、友善的,为了让更多的同学成为Contributor/Commiter,在github的issues 页面时不时就有新任务 发布,其中有不少非常适合新人的任务 。即使发布的任务对你来说有一定难度,你仍然可以尝试提交PR,社区的小伙伴会review你的PR并提供一些指导建议,帮助你在思想碰撞中提升自己。

我的社区成长

首先感谢无偿帮助过我的小伙伴(排名不分先后):yu199195,JooKS-me,KevinClair,lianjunwei,qicz,AhahaGe,hutaishi

贡献与收获

  • 学习如何同时兼容spring-boot 1.x和2.x,并贡献了非常多的方案。
  • 熟悉project-reactor和spring-webflux的使用,然后贡献大量的优化。
  • 熟悉netty后,贡献了netty线程池设置。
  • 熟悉dubbo后,扩展了ShenYu中的dubbo线程池。
  • 了解grpc和motan等RPC,贡献了共享线程池技术。
  • 提供MemoryLimitedLinkedBlockingQueue和MemorySafeLRUMap,较好地解决了技术悖论。

贡献Apache ShenYu的建议

  1. 初窥门径

    从官网文档开始,首先是admin/bootstrap的部署 ,其次选择一种你最熟悉的方式接入ShenYu ,最后发起请求,验证是否接入成功。

  2. 驾轻就熟

    在一段时间后,你对ShenYu的使用已经比较熟悉了。此时你可以从一种接入方式入手,看看数据最终是如何发送到admin并存储的。

  3. 略有小成

    你已经熟悉了注册阶段的某一条链路,可以开始按照你的接入方式来梳理运行阶段bootstrap的主链路了,此时不建议深挖每个插件的细节。

  4. 炉火纯青

    这个时候你已经对ShenYu的全局有一定认识了,也许在这个阶段你已经发现了一些ShenYu的小bug,或者你觉得ShenYu的某些使用姿势不符合人体工程学,那还等什么?

    到社区看看是否有人遇到了跟你一样的问题,你可以提交一些BUG/ISSUE/PR,社区会尽快回复你的。

  5. 出类拔萃

    随着不断地参与社区,你对社区的贡献越来越多,最后能够帮助他人解决问题,能够指导他人。

    你一直保持好奇,深入学习,能立足于底层。

    你具备一定的大局观,可以从全局的角度看待优化。

    你能够看到问题本质,并解决根本问题。

如何参与Apache ShenYu

  1. 如何成为贡献者

    Apache ShenYu社区特意写了非常全面的贡献者指南

  2. Github Issues

  3. 订阅邮件

    dev-subscribe@ShenYu.apache.org 发送一封邮件;

    发送成功后,您会收到来自 dev-help@ShenYu.apache.org 的回信,请按照邮件的提示回复这封邮件,确认订阅;

    在回复确认后,您会收到一封欢迎邮件,表示您已经成功订阅了邮件。

· One min read

时隔3个月,Apache ShenYu再次发布2.4.3版本,本次版本内容,有200+的pull Request,30+的贡献者参与,新增了非常多的功能,修复了很多bug,以及优化了很多内容。

新增功能

  • 增加 Http 注册客户端的重试机制。
  • 支持 Content-Type 类型为 octet-stream。
  • 支持 Bootstrap 的URIs 的重定向。
  • 增加本地 API 授权。
  • 支持配置 Dubbo消费者线程池大小。
  • 支持 Divide 插件的失败重试机制。
  • 支持 Webscoket 的客户端配置。
  • 支持 MemoryLimitedLinkedBlockingQueue。
  • 支持 Alibaba Dubbo 插件共享线程池。
  • 支持 gRPC 插件共享线程池。
  • 增加 Metrics 插件。
  • 增加 Cache 插件。
  • 增加 Logging RocketMQ 插件。

优化项

  • 更新 JUnit4 为 JUnit5。
  • 优化 password encryption。
  • 优化和校验 shenyu-admin 模块的接口参数。
  • 优化同步数据时,初始化数据的代码。
  • 增加 LoggingRocketMQ 插件的集成测试。
  • 在 ScheduledExecutorService 类中使用定时轮算法。
  • 重构admin 中注册 URI 的 buildHandle 方法。
  • 优化 Spring Cloud 客户端自动设置端口。
  • 重构 JWT 插件支持多等级 Tokens。
  • 优化网关netty参数自定义可配置

Fix Bug

  • 修复 CommonUpstreamUtils 类初始化时的空指针异常。
  • 修复 Nacos 注册失败时进行判断。
  • 修复登录未注册用户时的空指针异常。
  • 修复重复打印启动日志的问题。
  • 修复重试次数,超时时间不生效的问题。
  • 修复 Token 解析报错的问题。
  • 修复 Websocket 传输大数据异常的问题。
  • 修复 NettyHttpClient 插件在失败时未重试的问题。
  • 修复 CVE-2021-41303 漏洞。
  • 修复判断所有插件包含条件不生效的问题。
  • 修复 Http Headers 丢失数据的问题。
  • 修复 Rewrite 插件不支持 URL 占位符的问题。
  • 修复 Nacos 同步数据异常的问题。
  • 修复当 ContextPath 插件打开时,Websocket 代理失败或者空指针异常的问题。
  • 修复 Http 注册客户端的端口占用检查。

移除项

  • 移除 Monitor 插件。
  • 移除 shenyu-agent 模块。

Metrics 插件使用说明

Metrics 插件 插件是网关用来监控自身运行状态(JVM 相关),请求的响应迟延,QPS、TPS等相关 metrics。

插件的使用

在网关的 pom.xml 文件中添加 metrics 的依赖。

<dependency>
<groupId>org.apache.shenyugroupId>
<artifactId>shenyu-spring-boot-starter-plugin-metricsartifactId>
<version>${project.version}version>
</dependency>

在网关的配置 yaml 文件中编辑如下内容

shenyu:
metrics:
enabled: false #设置为 true 表示开启
name : prometheus
host: 127.0.0.1 #暴露的ip
port: 8090 #暴露的端口
jmxConfig: #jmx配置
props:
jvm_enabled: true #开启jvm的监控指标

具体 Metrics 的指标信息可查看官网说明:https://shenyu.apache.org/zh/docs/plugin-center/observability/metrics-plugin

Cache 插件使用说明

Cache 插件能够缓存目标服务的结果,还可以允许用户配置缓存结果失效时间。

插件的使用

在网关的 pom.xml 文件中添加 Cache 的依赖。

<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-cache</artifactId>
<version>${project.version}</version>
</dependency>

适用于数据不会频繁更新、需要大量调用、对于数据一致性要求不高的场景。

Logging RocketMQ 插件使用说明

Apache ShenYu 网关接收客户端请求,向服务端转发请求,并将服务端结果返回给客户端。网关可以记录下每次请求对应的详细信息,例如:请求时间、请求参数、请求路径、响应结果、响应状态码、耗时、上游IP、异常信息等。

Logging-RocketMQ 插件是记录访问日志并将访问日志发送到 RocketMQ 集群的插件.

插件的使用

在网关的 pom.xml 文件中添加依赖。

<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-logging-rocketmq</artifactId>
<version>${project.version}</version>
</dependency>

具体配置以及各个参数的作用等信息可查看官网说明:https://shenyu.apache.org/zh/docs/plugin-center/observability/logging-rocketmq

下个版本规划

新增集群方案

  • 新增shenyu-proxy模块,支持ShenYu的集群模式,以及网关的动态扩缩容
  • 新增shenyu-nginx子项目,对接Nginx-upstream模块

新增多语言SDK

多语言的SDK主要是为了让其他类型的语言快速的接入shenyu网关

https://github.com/apache/incubator-shenyu-client-donet

https://github.com/apache/incubator-shenyu-client-golang

https://github.com/apache/incubator-shenyu-client-python

新增 Helm Chart

https://github.com/apache/incubator-shenyu-helm-chart

helm-ci-pipeline

· One min read

春节刚过,Apache ShenYu便迎来了2.5.1版本。此次发布内容,共有 259 个pull Request,64位贡献者的参与。新增了若干功能,修复了bug,优化了若干内容。

新功能

  1. 添加 brpc 插件
  2. 支持nacos不同命名空间
  3. 优化 mock 插件
  4. 注册中心实例支持eureka
  5. 支持 API 文档
  6. 添加 sentinel 插件的规则处理参数
  7. 添加 e2e 测试引擎
  8. 添加 casdoor插件支持SSO
  9. 添加 logging-tencent-cls 插件
  10. 添加 logging-clickhouse 插件
  11. 添加 logging-pulsar 插件
  12. 添加 key-auth 插件

增强

  1. 优化 motan 客户端注解
  2. 优化 motan 插件配置
  3. 优化 websocket 客户端注解
  4. 优化 springcloud 客户端注解
  5. 优化 springmvc 客户端注解

重构

  1. 重构 API文档的mock请求
  2. 重构 logging-clickhouse 插件
  3. 优化 dubbo相关maven依赖
  4. 重构 sign 插件
  5. 更新 ShenyuExtConfiguration
  6. 移除不必要的单例
  7. 修复并发场景mock数据
  8. 重构 sdk 测试
  9. 重构 DefaultSignService
  10. 重构 shenyu-admin 规则
  11. 优化 ShaUtil
  12. 优化缓存
  13. 修复 ConcurrentModificationException
  14. 修复 etcd 数据同步
  15. 重构 sdk 客户端
  16. 优化请求超时
  17. 重构日志模块
  18. 重构 springcloud 客户端
  19. 重构 Motan插件
  20. 重构 admin 数据同步
  21. 重构 tars 客户端
  22. 重构 alibaba-dubbo 客户端
  23. 重构 springmvc 客户端
  24. 重构 admin 配置
  25. 优化随机算法
  26. 重构负载均衡算法
  27. 重构 logging-kafka 插件

错误修复

  1. 移除多余的 cookie 设置
  2. 修复 appAuth 删除逻辑
  3. 修复 Cryptor-Request 插件
  4. 修复 ext 插件
  5. 修复升级脚本
  6. 修复 Nacos 注册空指针问题
  7. 修复 sandbox json 解析
  8. 修复插件更新时的异常
  9. 修复 postgresql 脚本
  10. 修复 sentinel 插件的异常
  11. 修复 TencentClsLog异常
  12. 修复更新密码异常
  13. 修复选择器分页异常
  14. 修复 request 插件异常
  15. 修复 RateLimiter插件并发处理异常
  16. 修复 sign 插件异常
  17. 修复 context-path 插件异常

特别感谢以下贡献者对 2.5.1版本的支持和参与(排名不分先后)。

dragon-zhang, zhengpeng, mahaitao, 愿凌飞, hdgaadd, dayu, SongTao Zhuang, Misaya295 , Shawn Jim , yunlongn , Will , moremind , RayayChung , Kevin Clair , huanccwang , 柯杨 , Kunshuai Zhu , fantiq , youzipi , class , kyeongsun , 杨阳洋 , Liming Deng , 杨文杰 , xcsnx , hnxiaoyuan , dependabot , xiaoyu , wzhangNJ , Zihao Huang , ywj1352 , pandaapo , WuLang , Nineteen , kyeongsun , ableYang , Runqi Zhao , WeiS , Luke.Z , lahmxu , Sinsy , Daming , BoyuLi4 , jakiuncle , Bowen Li , huanccwang , gitchenjh , DamonXue , Wu Daifu , Jiageng , nuo-promise , Guocheng Tang , likeguo , Sixh-PrFor , throwable , renzhuyan , wangteng , qinghai777 , zly123987123 , 奕仁 , 尔等同学 , qifanyyy , Jairo , ousinka

· One min read

个人介绍

姓名:朱坤帅

学校:东北大学

角色: Apache ShenYu Committer

邮箱:jooks@apache.org

接触开源

大二下学期,一个偶然的机会,我看到了中科院软件研究所和openEuler社区举办的开源软件供应链点亮计划(下文简称开源之夏)的宣传。后来慢慢地了解到,原来在中国有那么多人活跃在开源社区,极大推动了开源生态的发展。之后也是非常巧合,认识了Apache ShenYu的VP (肖宇),他是我在开源之夏Apache ShardingSphere社区的导师。我提前完成开源之夏的任务之后,看到ShenYu刚进入Apache孵化器没多久,如火如荼,于是就开始接触到了Apache ShenYu。

在社区中成长

我最早给ShenYu提交的贡献并不是代码,而是文档。当时在官网发现了几个typo,于是果断提交了pr,“混”到了ShenYu的Contributor。

后来参与了社区的例会后,发现了ShenYu作为一个Apache孵化器项目,其实还存在着许多待优化、待丰富的地方。于是,我就从集成测试入手,开始了打怪升级之旅。

事实上,做集成测试能学习到的东西非常多,从Docker、CI到ShenYu的功能实现细节、微服务生态等等。有时在测试时会发现官网文档的不恰当之处,于是就需要自己阅读源码,理解代码逻辑,然后完善或更正文档;有时会发现一些bug,于是就能在定位bug、修复bug中熟悉ShenYu网关的细节。再到后来,逐渐可以自己实现一些new feature。

在对ShenYu项目越来越熟悉的同时,对ShenYu的敬畏感也越来越高,确实有种钻之弥坚的感觉。ShenYu中的设计模式、异步编程、函数式编程等都是非常巧妙,值得学习。

在开源中收获

回顾参与开源以来的近半年,感觉自己收获颇丰,主要体现在以下几方面。

  1. 技术水平的提升。参与开源不仅能接触很多在学校学不到的知识,同时也可以看到自己曾经学过的“屠龙武术”的实践场景。Apache ShenYu作为API网关,是整个微服务系统的入口,在参与项目建设的同时,自然会接触到各种微服务领域的知识。

  2. 开拓了视野。亲身经历项目new feature的讨论,参与ApacheCon、开源年会这类活动,使得我对微服务生态以及发展趋势有了更系统的理解和思考。

  3. 对求职面试的帮助。在个人简历上多出了开源经历这一项,在我找实习的面试中,确实有一定帮助,也得到了面试官的肯定。

给新人的一些建议

  1. 适应异步的交流方式。与我们平时的交流方式不同,开源社区往往使用的是异步的交流方式,比如邮件列表、GitHub issue、Jira等,而Apache ShenYu社区推荐的交流方式的优先级是:邮件列表 > Github issue > 微信群。这是因为通过邮件列表和github的方式,可以将问题的讨论过程和结果保留下来,是公开透明的。从另一个角度看,在邮件列表抛出问题,往往能得到最迅速且有效的解决。

  2. 积极参与讨论。社区胜于代码,这是Apache Way提倡的。通过充分的交流讨论而来的代码,更富有生命力。另外,Apache ShenYu社区每两周会召开一次线上例会,会对社区的工作做出周期性总结,以及讨论之后的目标、任务(同时也会发布到邮件列表)。

  3. 如何参与贡献?首先是经过上面说的讨论,然后才是动手。对于在工作中没有应用到ShenYu的人来说,编写集成测试、源码解析文章是非常好的切入点。同时,Apache ShenYu社区还时常会发布很多或易或难的任务,都期待大家的参与。

  4. 给想参与开源但还未动手的在校学生的建议。大胆参与开源吧,在我接触到的几个开源社区中,对学生都是更加友好、期待且包容的。另外,一些组织会举办专门引导学生群体参与开源的活动,比如开源之夏(前面提到的)、GSoC(谷歌编程之夏)等,也是非常不错的参与方式,不仅会有丰厚的奖金,还能结识很多小伙伴和技术大佬。

· One min read

新晋Committer介绍

大家好,我是qicz,非常荣幸收到Apache ShenYu社区的邀请成为Apache ShenYu的Committer。我是一个“杂牌”程序设计师。杂牌,是因为那年那月自己也是创业一份子,那时候常常不得不选择不同的程序设计语言,以此练就杂牌大法,这过程中也有更多的机会可以去了解和接触很多品种的项目。我也是一个开源爱好者,喜欢“玩代码”,也因此会常在开源社区得瑟,个人一直秉承着开源理念,也搞过好几个开源项目。在社区常有很多好玩的有意思的开源项目,而Apache ShenYu就是其中之一。下面,我简单的跟大家分享一下,在参与Apache ShenYu社区这段时间的感受。

一、心路历程

​ 了解到Soul是很早的时候了,正式接触Apache ShenYu是今年9月份的时候,那时刚收到了公司的网关需求,需要很短的时间掌握且要出东西。

​ 对于网关类项目,之前也有研究过比如Spring Gateway, Kong等。经过这段时间的研究并不断的参与到Apache ShenYu项目中,对它的设计理念非常的认可——插件化,所有的一切都是基于插件完成的。虽然类似Kong这样的网关也是支持插件的,但是lua搞起来是真的不好玩啊。另外一个就是Apache ShenYu的文档也是非常的丰富,把核心的设计,还有一些插件的原理都讲解的非常细致。Apache ShenYu是Java实现的,作为杂牌设计师,我还是很稀饭的。但尽管如此,研究它也真的是很痛苦的,第一次看到Apache ShenYu的源码时就非常的头大,那模块分的又细又多。

​ 万事开头难吧,有了好的开头可能就顺利了。我的开头是关于crossfilter的处理,把写在代码中的配置放到外置的配置文件中去。回想第一次提交pr的过程,真的是太磨人了,直到现在都觉得太痛苦了。

二、提供Pull Request

​ 首先,所有的issue,pr,email都要使用英文。有些时间没有用英文写东西了,很多时候自己写了,都不敢相信和确定自己写的是不是有问题,估计很多时候都搞了中式英文了。不过以自己多年创业经验来说,一切都是纸老虎,很多时候只要坚持做下去,就会越来越好了。直到现在,不断的使用英文整理各类东西,已经越来越游刃有余了。乐哉!美哉!妙哉!

​ 另一个,每次提交pr的checkstyle和test,也是很磨人。因为源码有很严格的规范,从注释到换行,到标点都有要求。从上大学开始接触程序设计,因为导师要求我们必须注意编码风格,所以直到今天一直严格要求自己的编码,不断的操练我的代码洁癖技能。自认为自己的编码很规范了,但是在第一次pr的时候是真的被打败。一方面是流程也不是很清楚,再者因为模块非常多,本地打包checkstyle非常慢,而很多问题需要完整的执行打包流程才能暴露。记得最久的一次,既然花了差不多2个小时。

​ 这过程是真的太痛苦了。不过经过多次的尝试,第一个pr成功了。艰难的开头算是结束了。但是从个人角度是非常支持和赞成的,如果没有这样的细致的要求,何以更好的建设这项目和社区,并以此为基础去帮助和服务更多的小伙伴。

三、社区与公司结合

​ 在不断对接公司的需求的过程中,对Apache ShenYu的研究也在不断的深入。开始做一些定制的开发,这过程中又不断的发现了其他的bug,于是有了第二个第三个和更多个pr。这过程中,很多时候是周末或者熬夜完成的,是真的很累,但还是非常有成就感的,尤其自己的pr解决了实际的需求,同时得到的社区的认可的时候,真的是成就感满满的。

​ 随着时间的推移,现在对Apache ShenYu已经有很深刻的认识,在未来自己也会尽全力在闲暇投入到社区的建设中,集合实际的需求,不管完善和丰富各类特性的设计和研发,坚持开源的初衷——源自社区回馈社区,为社区做出更多的贡献,与社区一同成长。

· One min read

新晋PPMC介绍

社区贡献

  • 深度参与Apache ShenYu插件体系的开发(GRPC插件等)。

  • 践行Apache Way,活跃在社区,帮助他人,积极参与源码活动与官网文档建设。

社区体验

  • 社区大于代码:营造好一个好的社区氛围是很重要的,比写代码还要重要。Apache ShenYu(incubating)社区也在不断的改进,不断的完善,尽可能的让新人参与进来,降低门槛。

  • 决策透明公开:不论是社区发展,还是功能开发,还是用户问题都会以邮件列表公开并存档。

  • 平等与尊重:专注于技术社区的交流,你的贡献决定你的权威。

  • 开阔视野:不满足于日常工作中的CRUD,参与开源,你的代码会被review,看看什么是好的代码,了解更多开源项目,提升个人技术能力。

  • 贡献无大小:不论你是完成了核心功能开发,还是编写测试案例,还是建设官网,修改文档,这些贡献都是一样的,都会得到社区的认可。