{"id":15350752,"url":"https://github.com/mytang0/fairydust","last_synced_at":"2025-04-15T04:21:43.454Z","repository":{"id":40608610,"uuid":"394195158","full_name":"mytang0/fairydust","owner":"mytang0","description":"Pluggable gray-scale components on the server side, currently supports Apache Dubbo (compatible with Alibaba Dubbo)","archived":false,"fork":false,"pushed_at":"2023-02-16T13:54:20.000Z","size":661,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T15:51:47.160Z","etag":null,"topics":["agent","dubbo","grayscale-plugin","non-intrusive","proxyless","server-side"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mytang0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-09T07:33:46.000Z","updated_at":"2023-08-01T01:36:01.000Z","dependencies_parsed_at":"2024-10-16T02:00:52.689Z","dependency_job_id":"ec77f4dc-d2cd-41ae-bdbc-763dccb18da5","html_url":"https://github.com/mytang0/fairydust","commit_stats":{"total_commits":3,"total_committers":2,"mean_commits":1.5,"dds":"0.33333333333333337","last_synced_commit":"e091e428961b34c114dff874fd2278a014ca62a6"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mytang0%2Ffairydust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mytang0%2Ffairydust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mytang0%2Ffairydust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mytang0%2Ffairydust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mytang0","download_url":"https://codeload.github.com/mytang0/fairydust/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249004377,"owners_count":21196864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","dubbo","grayscale-plugin","non-intrusive","proxyless","server-side"],"created_at":"2024-10-01T11:59:09.105Z","updated_at":"2025-04-15T04:21:43.429Z","avatar_url":"https://github.com/mytang0.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## 背景\n当分布式调度架构中缺少统一的调度网关，各业务团队通过 Dubbo Client 直接将流量打到了服务端，而要业务团队配合服务端做灰度更是不现实的，所以重要版本的发布就是一件极其头大的事。\n\n在这种情况下，我们就只能打服务端的主意，把一个个服务端变成一个个微型调度网关。从实践上来说，这是可行的。\n\n\n![avatar](image/方案/背景.jpg)\n\n\n\n## 方案\n### 原则\n - 对应用服务透明\n \n 不用入侵应用，无配置无开发无发版。很好理解：\n \n 1、对开发的新版本来说无所谓，但是旧版本呢？\n \n 2、代理对应用肯定是有一定性能影响的，灰度完成后（已摘除旧版本）如何无感知的摘除新版本的代理？\n \n \n - 能适配多种代理\n \n 目前来说就 Duddo 服务的代理。因为 Rest 请求，走统一网关有更优雅的实现，例如：Nginx 。\n \n\n### 设计\n#### 总体设计\n\n![avatar](image/方案/总体设计.jpg)\n\n\n#### 代理设计\n\n![avatar](image/方案/代理设计.jpg)\n\n\n#### 代理实现\n\n![avatar](image/方案/代理实现.jpg)\n\n\n### 使用手册\n[详见](doc/use.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmytang0%2Ffairydust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmytang0%2Ffairydust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmytang0%2Ffairydust/lists"}