异步烧脑业务场景



异步烧脑业务场景

有个分布式下的业务场景大概是这样子:节点收到客户端请求后,将消息发到多个副本节点,待收到若干副本回复以后,再返回给客户端。

肯定不能对到来的请求一个个串行服务,对吧,吞吐不可接受。于是来一个请求后节点都会记下session id,并行地执行很多客户端的请求,等收到足够多副本节点的回复以后回调一个函数,根据session来回复客户端。

这个业务还有个特点,只有leader节点会服务客户,副本节点不会,leader可能会切换。

于是一个bug出现了:有时候客户端永远得不到回复。为什么呢?发个请求到leader,处理请求期间leader切换了,新的leader上并没有那些session信息。

大概你会说,可以这么做呀:原leader在丢失身份的时候,需要返回错误给客户端,告诉它自已服务不了这次请求了。

好吧,我承认我简化场景了。实际是这样的,原leader中排队中的请求,它们可能会执行,也可能不会。假设失去身份之前消息已经同步到了新的leader节点了,消息就会执行。

郁闷的是,不能简单地返回客户端:不知道执行没有。因为这样子返回,客户端可能重试,而重试不是幂等的操作,会破坏业务。

这个业务还有一个蛋疼的,它要处理的某一种请求正好就是切换leader!你大概猜到了,明显又是大坑。执行了这个请求,那些还在排队中的请求要怎么搞?

额...很委屈的说,已经是简化很多后的场景了!


Read full article from 异步烧脑业务场景


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts