{"id":16691000,"url":"https://github.com/mrbald/bd4j","last_synced_at":"2025-09-07T15:43:22.221Z","repository":{"id":77691310,"uuid":"138622012","full_name":"mrbald/bd4j","owner":"mrbald","description":null,"archived":false,"fork":false,"pushed_at":"2018-06-27T05:58:11.000Z","size":79,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-07T04:57:23.040Z","etag":null,"topics":["dependency-injection","google-guice","java-8","scalability","service-oriented"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrbald.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-06-25T16:32:55.000Z","updated_at":"2018-07-11T10:28:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"9d901792-d021-4bec-afd0-344096ee6a7f","html_url":"https://github.com/mrbald/bd4j","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mrbald/bd4j","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrbald%2Fbd4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrbald%2Fbd4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrbald%2Fbd4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrbald%2Fbd4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrbald","download_url":"https://codeload.github.com/mrbald/bd4j/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrbald%2Fbd4j/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274058943,"owners_count":25215200,"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-09-07T02:00:09.463Z","response_time":67,"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":["dependency-injection","google-guice","java-8","scalability","service-oriented"],"created_at":"2024-10-12T16:06:27.971Z","updated_at":"2025-09-07T15:43:22.199Z","avatar_url":"https://github.com/mrbald.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BD4J\n\n## Background\n\nThe project demonstrates a possible approach to scaling a request-response service in successive steps.\nThe first implied step (not included here) is the profiling of the service endpoint itself and eliminating bottlenecks which are possible to get rid of.\nThe second step is inserting a lazy cache in front of the service endpoint.\nThe final third step (for now) is replacing the the direct service endpoint with a load balanced pool of direct endpoints.\n\n![diagram][diagram]\n\n## Building\n\nCommand:\n```bash\n$ mvn clean package\n```\n\n## Running\nA single calculation is synthetically adjusted to take 5 seconds to highlight the effect of caching and pooling.\n\n### CACHED_POOLED (total runtime ~ 5 sec)\n\nCommand:\n```bash\n$ mvn exec:java -Dexperiment=CACHED_POOLED\n```\n\nOutput:\n```\n00:00:55.908 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - hi // 121 ms\n00:00:55.910 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - running as CACHED_POOLED // 123 ms\n00:00:56.205 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - requesting calculation // 418 ms\n00:00:56.210 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 8192... // 423 ms\n00:00:56.211 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.PooledCalc - calculating for 8192... // 424 ms\n00:00:56.217 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 16384... // 430 ms\n00:00:56.218 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.PooledCalc - calculating for 16384... // 431 ms\n00:00:56.218 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 8192... // 431 ms\n00:00:56.218 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 65536... // 431 ms\n00:00:56.218 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.PooledCalc - calculating for 65536... // 431 ms\n00:00:56.218 DEBUG [pool-2-thread-1] n.b.b.DirectCalc - calculating for 16384... // 431 ms\n00:00:56.222 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 16384... // 435 ms\n00:00:56.222 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 65536... // 435 ms\n00:00:56.222 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 8192... // 435 ms\n00:00:56.222 DEBUG [pool-3-thread-1] n.b.b.DirectCalc - calculating for 65536... // 435 ms\n00:00:56.223 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - collecting results // 436 ms\n00:00:01.218 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 8192... // 5431 ms\n00:00:01.218 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 2918 // 5431 ms\n00:00:01.218 DEBUG [pool-2-thread-1] n.b.b.DirectCalc - calculated for 16384... // 5431 ms\n00:00:01.219 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 48361 // 5432 ms\n00:00:01.223 DEBUG [pool-3-thread-1] n.b.b.DirectCalc - calculated for 65536... // 5436 ms\n00:00:01.223 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 63556 // 5436 ms\n00:00:01.223 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 48361 // 5436 ms\n00:00:01.223 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 63556 // 5436 ms\n00:00:01.223 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 2918 // 5436 ms\n00:00:01.223 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - bye // 5436 ms\n\n```\n\n### CACHED (total runtime ~ 15 sec)\n\nCommand:\n```bash\n$ mvn exec:java -Dexperiment=CACHED\n```\n\nOutput:\n```\n00:00:38.444 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - hi // 119 ms\n00:00:38.446 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - running as CACHED // 121 ms\n00:00:38.630 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - requesting calculation // 305 ms\n00:00:38.777 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 8192... // 452 ms\n00:00:38.783 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 16384... // 458 ms\n00:00:38.783 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 65536... // 458 ms\n00:00:38.783 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 16384... // 458 ms\n00:00:38.783 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 65536... // 458 ms\n00:00:38.783 DEBUG [net.bobah.bd4j.Main.main()] n.b.b.CachedCalc - calculating for 8192... // 458 ms\n00:00:38.783 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - collecting results // 458 ms\n00:00:38.785 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 8192... // 460 ms\n00:00:43.785 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 8192... // 5460 ms\n00:00:43.785 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 2918 // 5460 ms\n00:00:43.785 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 16384... // 5460 ms\n00:00:48.785 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 16384... // 10460 ms\n00:00:48.786 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 65536... // 10461 ms\n00:00:48.786 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 48361 // 10461 ms\n00:00:53.786 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 65536... // 15461 ms\n00:00:53.786 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 63556 // 15461 ms\n00:00:53.787 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 48361 // 15462 ms\n00:00:53.787 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 63556 // 15462 ms\n00:00:53.787 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 2918 // 15462 ms\n00:00:53.787 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - bye // 15462 ms\n```\n\n### DIRECT (total runtime ~ 30 sec)\n\nCommand:\n```bash\n$ mvn exec:java -Dexperiment=DIRECT\n```\n\nOutput:\n```\n00:00:13.014 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - hi // 125 ms\n00:00:13.016 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - running as DIRECT // 127 ms\n00:00:13.212 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - requesting calculation // 323 ms\n00:00:13.380 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - collecting results // 491 ms\n00:00:13.382 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 8192... // 493 ms\n00:00:18.382 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 8192... // 5493 ms\n00:00:18.382 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 2918 // 5493 ms\n00:00:18.382 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 16384... // 5493 ms\n00:00:23.383 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 16384... // 10494 ms\n00:00:23.383 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 65536... // 10494 ms\n00:00:23.383 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 48361 // 10494 ms\n00:00:28.383 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 65536... // 15494 ms\n00:00:28.383 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 16384... // 15494 ms\n00:00:28.383 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 63556 // 15494 ms\n00:00:33.384 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 16384... // 20495 ms\n00:00:33.384 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 65536... // 20495 ms\n00:00:33.384 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 48361 // 20495 ms\n00:00:38.384 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 65536... // 25495 ms\n00:00:38.384 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 63556 // 25495 ms\n00:00:38.385 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculating for 8192... // 25496 ms\n00:00:43.385 DEBUG [pool-1-thread-1] n.b.b.DirectCalc - calculated for 8192... // 30496 ms\n00:00:43.385 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - calc.calculate(): 2918 // 30496 ms\n00:00:43.385 INFO  [net.bobah.bd4j.Main.main()] n.b.b.Main - bye // 30496 ms\n```\n\n\n[diagram]: ./diagram.png\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrbald%2Fbd4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrbald%2Fbd4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrbald%2Fbd4j/lists"}