Category Archives: design


jenkins start/stop Create Jenkins pipeline with Freestyle project

TPS = connections / latency

If one connection supports 5TP, then 5 connection supports 25TPS. In another word, if a connection supports 5TPS, that means request latency is 200ms. We have: TPS = number_of_connection / request_latency So TPS relates to TPS per connection and number of connection. How to find max TPS? set connection to 1, literally increase TPS from… Read More »

Read-after-write model vs eventually consistency model

Below is the read-after-write model: GET /key-prefix/cool-file.jpg 404 PUT /key-prefix/cool-file.jpg 200 GET /key-prefix/cool-file.jpg 200 As we can see, file doesn’t exist at beginning. As long as PUT is done, GET always return successfully. Below is eventually consistency model: GET /key-prefix/cool-file.jpg 404 PUT /key-prefix/cool-file.jpg 200 GET /key-prefix/cool-file.jpg 404 File doesn’t exist, after PUT is done, GET… Read More »

Proxy Pattern

Instead of interact with direct resource, client interacts with proxy, then proxy interacts with real resources. Reasons could be: cache, security, encapsulation(http). A proxy has same interface as the original class. In this case, the proxy has same behavior as original class. Adaptor changes the interface. Facade enhances the interface. In below graph: RealSubject implements… Read More »

HEAD detached

You may have below after git log: commit f6601f5ae74d5b61303b17f1edcb56a6755c18ea Commit message commit 1e98a15d9a182ba965955bc960fa394a3de5c36a Commit message… git branch shows: 8c85904323f8:AlexaMacawDeciderService lipl$ git branch * (HEAD detached from refs/heads/lipl-branch-name) branch1 branch2 branch3 mainline Also it shows HEAD detached. It is good time to create a branch and specify most recent commit: git branch new-branch-name f6601f5ae74d5b61303b17f1edcb56a6755c18ea Thus, git branch shows… Read More »

Visitor pattern

1. Visitable public interface Visitable { int accept(Visitor visitor); } 2. ConcreteVisitable public class LiquorVisitable implements Visitable { @Override int accept(Visitor visitor) { return visitor.visit(this); } } public class FoodVisitable implements Visitable { @Override int accept(Visitor visitor) { return visitor.visit(this); } } 2. Visitor public interface Visitor { int visit(LiquorVisitable liquorVisitable); int visit(FoodVisitable foodVisitable); }… Read More »

2PC, 3PC

There are two basic distributed transaction protocols: two-phases-commit and three-phases-commit. two-phase-commit Assumption, coordinator and cohorts are never down. If coordinator is down, all other cohorts will be blocking and waiting for its recover. If a cohort is down and when it wakes up, it will get notified by coordinator(commit or rollback). 3-phase-commit For 3PC, coordinators… Read More »

Some feeling about GAE performance

A web service is deployed in GAE(google app engine). This is the loading test on GAE with different core, concurrency combinations. 1 core, 1 thread, 0.3s per reqeust 1 core, 160 threads, 12s per request 1 core, 150 threads, 8s per request 8 core, 50 threads, 5s per request 16 core, 50 threads, 3s per… Read More »

D3MAP example

I came across a project about d3map recently. The idea of the project is to parse the [longitude, latitude] of a location in USA, and show it on the USA map. Here are some example of this techniques: USA county map USA states map Circle Animation USA states with different color

Zookeeper Study Summary

In terms of CAP theorem, Zookeeper is a CP system. It emphasizes consistency in distributed system. It is a Leader – Follower based system. Zookeeper assumes that at least n/2+1 nodes are available. This guarantees brain-split won’t happen to zookeeper. How to handle partial failure? For example, there are 5 nodes. 2 of them are down.… Read More »