{"id":18437833,"url":"https://github.com/zilliqa/goduplicator","last_synced_at":"2025-10-04T05:30:00.283Z","repository":{"id":56234384,"uuid":"161473808","full_name":"Zilliqa/goduplicator","owner":"Zilliqa","description":null,"archived":false,"fork":false,"pushed_at":"2023-07-03T07:29:27.000Z","size":57,"stargazers_count":3,"open_issues_count":2,"forks_count":1,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-07T20:43:50.041Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Zilliqa.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":"2018-12-12T10:45:55.000Z","updated_at":"2023-07-03T07:29:30.000Z","dependencies_parsed_at":"2024-06-19T19:01:08.924Z","dependency_job_id":"6b89ef69-c3b0-445f-b928-2f2145949cf2","html_url":"https://github.com/Zilliqa/goduplicator","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/Zilliqa/goduplicator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fgoduplicator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fgoduplicator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fgoduplicator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fgoduplicator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zilliqa","download_url":"https://codeload.github.com/Zilliqa/goduplicator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fgoduplicator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278267355,"owners_count":25958831,"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","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-11-06T06:16:23.147Z","updated_at":"2025-10-04T05:30:00.266Z","avatar_url":"https://github.com/Zilliqa.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"goduplicator [![Build Status](https://travis-ci.org/mkevac/goduplicator.svg?branch=master)](https://travis-ci.org/mkevac/goduplicator)\n============\n\nWhy you may need this?\n----------------------\nYou may have production servers running, but you need to upgrade to a new system. You want to run A/B test on both old and new systems to confirm the new\nsystem can handle the production load, and want to see whether the new system can run in shadow mode continuously without any issue.\n\nIt is similar to another project https://github.com/agnoster/duplicator, but faster on my tests and supports more than one mirror.\n\nHow it works?\n-------------\ngoduplicator is a reverse proxy. It mirrors the data to all configured servers. The data from main server is sent back, but data from all other servers is ignored.\n\ngoduplicator is a TCP proxy, so it does not care which higher level protocol you are using.\n\nDownload binary\n---------------\nYou can download binary files here: https://github.com/mkevac/goduplicator/releases\n\nInstall from source\n-------------------\nYou would need Go language installed. Just execute this command:\n```\ngo get github.com/mkevac/goduplicator\n```\n\nUsage\n-----\n```\n./goduplicator -l ':8080' -f ':8081' -m ':8082' -m ':8083'\n-l is a listening address\n-f is an address of a main server\n-m is an address of a mirror server (there could be more than one)\n```\n\nComparison to agnoster/duplicator\n---------------------------------\nagnoster/duplicator on my tests gives about 46000 req/sec, while goduplicator gives approximately 76000 req/sec\nClient and Server used are in test/ directory.\n\nServer:\n```\n$ ./goduplicatortestserver\n```\n\nAnother server:\n```\n$ ./goduplicatortestserver -l ':11001'\n```\n\ngoduplicator:\n```\n$ ./goduplicator -l ':11002' -f ':11000' -m ':11001'\n```\n\nagnoster/duplicator:\n```\n$ duplicator -p 11002 -f 11000 -d 11001\n```\n\nResults for goduplicator:\n```\n$ ./goduplicatortestclient -a ':11002'\n2015/09/04 20:07:49 71042 req/sec\n2015/09/04 20:07:50 76552 req/sec\n2015/09/04 20:07:51 76397 req/sec\n2015/09/04 20:07:52 76691 req/sec\n2015/09/04 20:07:53 76212 req/sec\n2015/09/04 20:07:54 76555 req/sec\n2015/09/04 20:07:55 76695 req/sec\n2015/09/04 20:07:56 76797 req/sec\n```\n\nResults for agnoster/duplicator:\n```\n$ ./goduplicatortestclient -a ':11002'\n2015/09/04 20:06:25 44803 req/sec\n2015/09/04 20:06:26 46850 req/sec\n2015/09/04 20:06:27 47002 req/sec\n2015/09/04 20:06:28 46966 req/sec\n2015/09/04 20:06:29 47248 req/sec\n2015/09/04 20:06:30 46897 req/sec\n2015/09/04 20:06:31 46590 req/sec\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzilliqa%2Fgoduplicator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzilliqa%2Fgoduplicator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzilliqa%2Fgoduplicator/lists"}