Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Community tasks 新手任务计划 #108

Open
seeflood opened this issue Jul 2, 2021 · 87 comments
Open

Community tasks 新手任务计划 #108

seeflood opened this issue Jul 2, 2021 · 87 comments
Labels
help wanted Extra attention is needed

Comments

@seeflood
Copy link
Member

seeflood commented Jul 2, 2021

Community tasks

As a programming enthusiast , have you ever felt that you want to participate in the development of an open source project, but don't know where to start?
In order to help everyone better participate in open source projects, the MOSN community will regularly publish community tasks to help everyone learn by doing!

Task List

Tasks of different difficulty are released:

Easy

Layotto runtime

Bug fix

Write a Feature

Comment related

  • Add comment to exported function/method/interface/variable (such as RPC/distributed lock modules), see add comment to exported function/method/interface/variable #112
    Considering that the workload of adding comments to all the modules is relatively large, we split it into multiple tasks:
  • add comments to RPC related code
  • add comments to pubsub related code
  • add comments to lock related code . assigned
  • add comments to state API related code
  • add comments to actuator related code
  • add comments to tcpdump related code
  • add comments to WASM related code
  • add comments to flow-control related code
  • Add comments for file API related code in the proto file.
    image

SDK related

Document related

Translation

Tests related

Components

in-memory components

See #67 (comment)
We want to let users and sdk developers run our demo without go , docker and back-end storage (e.g. redis) pre-installed.
To achieve this goal, we need to add in-memory components,including:

  • pubsub
  • lock
  • sequencer
  • configuration API

You can take the in-memory state store component as an example,see #327

Medium

Add support for Dapr API

We want Layotto to support both Layotto API and Dapr API. In this way, if users are worried about vendor lock-in, they can use Dapr SDK to switch between Layotto and Dapr freely.
You can refer to:
#361
#362

SDK

  • Improve .net sdk. Make it have the same capabilities and api as go sdk
    assigned.see Add .net sdk #130

  • Develop python sdk
    Because we want to reduce the cost of maintaining multi-language SDKs, we want to reuse Dapr SDKs as much as possible. Therefore, this task suggests to fork the Dapr python SDKs for modification (because the package path of the proto interface is different, so the code compiled by proto is different, so we need to do some modification).

  • Develop the spring-boot-layotto package. See feat: layotto springboot layotto/java-sdk#8
    Let layotto integrate spring boot so that users can use annotations to register pubsub subscription callback

Actuator

WASM

File api implementation

Sequencer API related

Distributed Lock API

Engineering

Currently we use github actions as ci/cd pipeline, and the configuration file is here
You can refer to some github actions high-quality tutorials:

https://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html

http://www.ruanyifeng.com/blog/2019/12/github_actions.html

  • Automated build: Automatically compile multi-platform binary files (binary files under linux/mac), compress (compress binary files), and build docker images
    You need to investigate the solution to see whether you write a build script yourself, using the cross-compilation feature of go, or just use a exist platform to help you build

Hard

Observability

Runtime API Lab

Hard

#530

  • Redis API.

  • Kafka API.
    Alicloud SLS component can implement Kafka-like API too.

  • Design transaction message API (like RocketMQ's) for pubsub

  • Delay message API for pubsub

  • Let Layotto support Dapr's Config API (alpha version)
    We have been discussing and working with Alibaba and Dapr community to contribute a Config API for Dapr since March of this year,and recently it was finally merged into Dapr .
    Now it's time to can make Layotto support Dapr's Config API.
    Dapr Config API is still in the alpha version, which is similar to Layotto's existing Config API but lacks some fields. You can refer to Layotto's existing implementation during development.
    See Dapr's API definition

  • Let Layotto support secret API.
    Layotto's goal is to build a Runtime API standard with Dapr and other communities (promote Dapr API as an industry standard, and Layotto as an implementation of this API), so it needs to support Dapr's secret API. Therefore, this task needs to port Dapr's secret API into Layotto. For Dapr's secret management related documents, see https://docs.dapr.io/developing-applications/building-blocks/secrets/
    assigned. see Let Layotto support secret API #212

  • Layotto support Binding API. Same as above, porting Dapr's binding API into Layotto

WASM Lab

If you are interested, you can reply and we will assign the task to you

Kubernetes Lab

Istio

@seeflood seeflood added the help wanted Extra attention is needed label Jul 2, 2021
@seeflood seeflood pinned this issue Jul 2, 2021
@seeflood
Copy link
Member Author

seeflood commented Jul 2, 2021

chinese:

新手任务计划

作为技术同学,你是否有过“想参与某个开源项目的开发、但是不知道从何下手”的感觉?
为了帮助大家更好的参与开源项目,MOSN社区会定期发布适合新手的新手开发任务,帮助大家learning by doing!

任务列表

任务分为不同难度:

  • Easy
  • Medium
  • Hard

上手攻略

新手攻略:从零开始成为 Layotto 贡献者

Easy——从这里开始,成为Layotto Contributor!

Layotto runtime

Bug fix

Write a Feature

注释相关

  • 为Layotto中的关键模块添加注释(例如RPC/分布式锁等模块) 见add comment to exported function/method/interface/variable #112
    考虑到全加注释工作量比较大,因此每个模块可以单独发一个任务
  • add comments to RPC related code
  • add comments to pubsub related code
  • add comments to lock related code . assigned
  • 为 state API 相关代码添加注释
  • 为 actuator 相关代码添加注释
  • 为 tcpdump 相关代码添加注释
  • add comments to WASM related code
  • 为 flow-control 相关代码添加注释
  • 为 proto 文件中file API 相关接口 补充注释. 有了更多注释后,可以用工具根据注释生成文档
    image

文档相关

翻译

英翻中

中翻英

SDK相关:

测试相关:

Components

in-memory components

#67 (comment)
我们想让用户和sdk开发者不用装go,docker和存储系统(比如redis)就能跑起来layotto,减少上手门槛。
为了实现这个目标,我们需要添加in-memory 组件,在内存里增删改查。包括:

  • pubsub
  • lock
  • sequencer
  • configuration API

You can take the in-memory state store component as an example,see #327

Medium——来实现一些很酷的feature吧!

Layotto支持Dapr API

我们想让 Layotto 既支持 Layotto API,又支持Dapr API。这样用户如果担心厂商绑定,可以使用Dapr SDK,在Layotto和Dapr之间自由切换。
您可以参考:
#361
#362

SDK

  • 添加 python sdk
  • 添加 c/c++ sdk
  • 丰富 .net sdk,使其有和go sdk一样的能力和api
    assigned.see Add .net sdk #130
  • 开发spring-boot-layotto包. review中,见feat: layotto springboot layotto/java-sdk#8
    让layotto集成spring boot,可以通过注解进行注册pubsub 订阅消息的回调函数

Actuator

WASM相关

File Api相关

laytto现在添加了file接口的抽象,默认支持了aliyun的oss的能力,现在需要增加其它的后端文件存储组件。可以参照#98 , #236

  • awsOss
  • local file system(file on local disk)
  • HDFS
  • minIo
  • 用 ceph 实现 File API 组件

Sequencer API相关

分布式锁API相关

注意在实现分布式锁之前需要谨慎评估一下这个存储组件是否适合实现分布式锁,会不会很容易出现丢锁、死锁等问题?分布式锁没法保证100%的正确性,但我们也要尽量保证正确,尽量为用户屏蔽复杂的问题~

Mongo的ttl是分钟级可能会太久、异步复制可能丢锁,但是好像能改服务端配置改成同步复制?(我刚查到一篇博客 说能),Cassandra组件我还没有细看,看ShedLock 实现了Cassandra于是就加进来了。总之需要开发者在设计时仔细评估哈~

工程化相关

目前ci/cd使用github actions,配置文件在这里 可以参考一些github actions优质教程:

https://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html
http://www.ruanyifeng.com/blog/2019/12/github_actions.html

  • 发布新版本时自动化构建: 修改 workflow,每次发布新版本时自动交叉编译出多平台的二进制文件(linux/mac下的二进制文件)、压缩(把二进制文件压缩),以便在发版报告中提供二进制文件或压缩文件
    需要调研一下方案,看看是自己写一个构建脚本、用go的交叉编译功能,还是有现成的平台帮忙做构建

  • 自动化构建 Docker 镜像: 每次有PR 合并、发布新版本时,自动构建docker镜像
    WIP. See Proposal: make layotto more friendly in Cloud Native Ecosystem #392

可观测性

Metrics

  • 提供一个 Layotto 集成 Prometheus 的示例 Demo
    Layotto 跑在 MOSN 上,而 MOSN 已经支持集成 Prometheus 了,我们需要一个 Demo 示例、quickstart 文档,指导用户如何集成

Hard——成为中间件大师!

可观测性

Runtime API Lab

开发更多的 API 插件

#530

WASM Lab

Kubernetes Lab

Istio

@tianjipeng
Copy link
Member

I want to add unit tests for rpc related code, please assign to me

@seeflood
Copy link
Member Author

seeflood commented Jul 2, 2021

I want to add unit tests for rpc related code, please assign to me

Cool.
Feel free to ask for help, and welcome to the community!
If you find github conversation inconvenient to communicate,we can chat on dingtalk (in chinese,haha)
Our dingtalk group is 31912621

@oneyue610
Copy link

Hello, I am interested in adding unit tests for WASM related code. Could you please let me try to do it?

@seeflood
Copy link
Member Author

seeflood commented Jul 2, 2021

Hello, I am interested in adding unit tests for WASM related code. Could you please let me try to do it?

Welcome!
You can reply the issue #105 so that I can assign it to you.
If you encounter any problems,feel free to ask for help in github conversation or dingtalk.
Webassembly is a cool new tech.I like it too :)

@stulzq
Copy link
Member

stulzq commented Jul 8, 2021

I want to impl etcd lock, please assign to me

@seeflood
Copy link
Member Author

seeflood commented Jul 8, 2021

@stulzq
Cool! I added a issue #127. You can reply there and then we can assign it to you

@seeflood
Copy link
Member Author

seeflood commented Jul 9, 2021

New tasks added

@ZLBer
Copy link
Member

ZLBer commented Jul 23, 2021

I want to add java client base on protobuf , assign to me?

@seeflood
Copy link
Member Author

I want to add java client base on protobuf , assign to me?

Ok, I will assign it to you!
@MoonShining is developing a rpc method for java client, I think you can add any other features for java sdk

@seeflood
Copy link
Member Author

New tasks added:

  • Add sequencer API components(e.g. zookeeper,leaf)
  • Implement the segment caching feature of Sequencer API

@stulzq
Copy link
Member

stulzq commented Jul 23, 2021

Sequencer API impl: mongo & Leaf, pls assign to me

@seeflood
Copy link
Member Author

Sequencer API impl: mongo & Leaf, pls assign to me

Cool!

@ZLBer
Copy link
Member

ZLBer commented Jul 23, 2021

Sequencer API impl: zk & standalone redis, pls assign to me

@seeflood
Copy link
Member Author

Sequencer API impl: zk & standalone redis, pls assign to me

Cool!

@ZLBer
Copy link
Member

ZLBer commented Jul 28, 2021

segment caching assign to me , pls

@seeflood
Copy link
Member Author

seeflood commented Jul 28, 2021

segment caching assign to me , pls

Ok. @ZLBer is so good!

@seeflood seeflood added the good first issue Good for newcomers label Jul 30, 2021
@seeflood
Copy link
Member Author

seeflood commented Jul 30, 2021

Added some engineering related tasks:

  • Automatically generate API documents: use some tools to automatically generate API documents based on proto files. Refer to the document automatically generated by Etcd
  • Automated code review in ci/cd pipeline, including:
    no Chinese in the code;
    maybe some other necessary checks
  • Automated build: Automatically compile multi-platform binary files (binary files under linux/mac), compress (compress binary files), and build docker images

@seeflood
Copy link
Member Author

seeflood commented Aug 6, 2021

New tasks added:

@seeflood
Copy link
Member Author

New tasks added:

@byene0923
Copy link

Hi, Sequencer API related: snowflake algorithm (need to avoid clock rollback problems)
could this refer https://github.com/baidu/uid-generator?
uid-generator can avoid clock rollback problems but it depends on db
if can be done, we just need to implement the go version uid-generator

@keleqnma
Copy link
Contributor

为RPC API添加接口文档.See https://mosn.io/layotto/#/en/api_reference/rpc/reference, assign to me , pls

@seeflood
Copy link
Member Author

seeflood commented Aug 17, 2021

@byene0923 I haven't used that library before,but I think any existing system which is suitable for id generation can be integrated as a component.So welcome to implement it !

if can be done, we just need to implement the go version uid-generator

Yep,but I am worried that will there be too much work to do? Will the workload be too great? I am not familiar with this library

@seeflood
Copy link
Member Author

seeflood commented Aug 17, 2021

为RPC API添加接口文档.See https://mosn.io/layotto/#/en/api_reference/rpc/reference, assign to me , pls

@keleqnma Cool!
Thanks for your passion and welcome to the Layotto community!
I opened a new issue #185 ,you can reply there so that I can assign it to you.

@seeflood
Copy link
Member Author

seeflood commented Feb 8, 2022

Hi @LXPWing,it has not been done yet.
I add a new issue layotto/java-sdk#12 and it will be assigned to you.
Thanks for your help !

@chen1076680807
Copy link

Hi @seeflood ,I want to try add distributed lock API for java sdk

@seeflood
Copy link
Member Author

seeflood commented Mar 3, 2022

@chen1076680807 cool !
I add a new issue layotto/java-sdk#15 and it will be assigned to you.
Thanks for your help !
If you met any problems, feel free to ask for help. You can contact with us on both github and dingtalk

@LXPWing
Copy link
Member

LXPWing commented Mar 4, 2022

hi @seeflood, I want to try pubsub api

@seeflood
Copy link
Member Author

seeflood commented Mar 4, 2022

@LXPWing Cool !
I reopen the issue and assigned to u,see #361 (comment)

@seeflood
Copy link
Member Author

New tasks added:

@seeflood
Copy link
Member Author

seeflood commented Apr 7, 2022

New tasks added:

chinese:

@jieeny
Copy link
Contributor

jieeny commented Apr 7, 2022

@seeflood Hi , I want to try Translate "Explain Layotto's github workflow" into Chinese。

@seeflood
Copy link
Member Author

seeflood commented Apr 7, 2022

@jieeny Thanks for your help !
I assigned it to you in #453

@seeflood
Copy link
Member Author

seeflood commented Apr 7, 2022

New tasks added,see #455

  • Delete redundant demos and keep only one demo,which can be used for all Sequencer API components
  • Delete redundant demos and keep only one demo,which can be used for all Configuration API components
  • Delete redundant demos and keep only one demo,which can be used for all File API components
  • Delete redundant demos and keep only one demo,which can be used for all lock API components
  • Delete redundant demos and keep only one demo,which can be used for all pubsub API components
  • Delete redundant demos and keep only one demo,which can be used for all State API components

chinese:

  • 删除多余的demo.见 Change the demo of each API to one #455
    • 删除多余的demo, 只保留一个 Sequencer API demo,能同时用于所有 Sequencer API 组件
    • 删除多余的demo, 只保留一个 Configuration API demo,能同时用于所有 Configuration API 组件
    • 删除多余的demo, 只保留一个 File API demo,能同时用于所有 File API 组件
    • 删除多余的demo, 只保留一个 Lock API demo,能同时用于所有 Lock API 组件
    • 删除多余的demo, 只保留一个 Pubsub API demo,能同时用于所有 Pubsub API 组件
    • 删除多余的demo, 只保留一个 State API demo,能同时用于所有 State API 组件

@seeflood
Copy link
Member Author

seeflood commented Apr 8, 2022

New tasks added:

  • Test our quickstart documents in the CI. see proposal: 使用工具自动测试 Quickstart 文档 #447
    • refactor quickstart document for pubsub API and make it testable.
    • refactor quickstart document for Configuration API and make it testable.
    • refactor quickstart document for Lock API and make it testable.
    • refactor quickstart document for Sequencer API and make it testable.
    • refactor quickstart document for RPC API and make it testable.
    • refactor quickstart document for File API and make it testable.
    • refactor quickstart document for API plugin and make it testable.
    • refactor quickstart document for Layotto Actuator and make it testable.
    • refactor quickstart document for Skywalking and make it testable.

@seeflood
Copy link
Member Author

New tasks added:

Bug fix

Write a Feature

@seeflood
Copy link
Member Author

seeflood commented Apr 14, 2022

New tasks added:

  • Implementing File API components with ceph
  • Integrates with istio 1.10, allowing layotto's invokeService API to reuse istio's traffic management capabilities. See [OSPP 2022] run layotto along with istio 1.10.0 #311
  • Automatically check that new PR must have related issues

chinese:

@seeflood
Copy link
Member Author

New tasks added:

Easy

测试相关:

修复 rpc 相关代码的单元测试报错问题
#550

翻译相关:

将“介绍 layotto CI” 的文档翻译成英文
#545

将“介绍如何自动测试 quickstart” 的文档翻译成英文
https://mosn.io/layotto/#/zh/development/test-quickstart

开发相关

优化 lock api demo,让所有 lock 组件公用一个 demo
优化 sequencer api demo,让所有 sequencer 组件公用一个 demo
优化 pubsub api demo,让所有 pubsub 组件公用一个 demo

Hard

设计实现 Redis API
设计实现 Kafka API
有了这个API后,我们可以用阿里云 SLS 组件来实现这个 API
设计实现事务消息 API
设计实现延迟消息 API

@seeflood
Copy link
Member Author

New tasks added:

  • Integrate with Zipkin

@seeflood
Copy link
Member Author

seeflood commented May 26, 2022

New tasks added:

@cyb0225
Copy link
Contributor

cyb0225 commented Mar 10, 2023

hi @seeflood, I'd like to translate How to deploy and upgrade Layotto into English as my first contribution. Could you assign it to me?

@seeflood
Copy link
Member Author

@cyb0225 Sorry the doc has already been translate. You can find the good first issue list here:
https://github.com/mosn/layotto/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22+no%3Aassignee

explanation:
#653

@cyb0225
Copy link
Contributor

cyb0225 commented Mar 10, 2023

@seeflodd I'm sorry, I didn't catch that part. I will choose another issue that I'm interested in contributing to.

@zhenjunMa zhenjunMa pinned this issue Mar 10, 2023
@jizhuozhi
Copy link

Hello, @seeflood

I think the rate limiting logic is also very suitable for sinking into layotto, and it is very suitable as a task for newcomers (the token bucket algorithm is a very mature current limiting algorithm).

Regardless of whether it is a standalone rate limit or a cluster rate limit, the business code only needs to know that it needs to check whether the request can pass, and does not need to pay attention to the policy and storage of the traffic limit (this is the business current limit, not the protection mechanism for the entire service )

@seeflood
Copy link
Member Author

seeflood commented May 6, 2023

@jizhuozhi agreed.
@zhenjunMa @wenxuwan How about adding some good first issues on it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests