architecture patterns and practices

178
trait Speaker { val name:String val aliases:Set[String] } trait Organization{ val bu = "tmall" val group = "alibaba" } object WangFuqiang extends Speaker with Organization{ val name = "王福强" val aliases = Set("千任", "@囚千任") val blog = “http://afoo.me } 架构模式与实践漫谈 Sunday, July 14, 13

Upload: fuqiang-wang

Post on 13-Jan-2015

1.438 views

Category:

Technology


0 download

DESCRIPTION

ADC2013-阿里技术嘉年华上的分享

TRANSCRIPT

Page 1: Architecture patterns and practices

trait Speaker { val name:String val aliases:Set[String]}

trait Organization{ val bu = "tmall" val group = "alibaba"}

object WangFuqiang extends Speaker with Organization{ val name = "王福强"

val aliases = Set("千任", "@囚千任") val blog = “http://afoo.me”}

架构模式与实践漫谈

Sunday, July 14, 13

Page 2: Architecture patterns and practices

Architecture

Sunday, July 14, 13

Page 3: Architecture patterns and practices

Architecture Principles• Abstraction

• Modularity

• Scalability

• Robustness

• Security

• Availability

• Reusability

• name it more...

Sunday, July 14, 13

Page 4: Architecture patterns and practices

Exciting?

Sunday, July 14, 13

Page 5: Architecture patterns and practices

Don’t Be Silly!

Sunday, July 14, 13

Page 6: Architecture patterns and practices

Overload

Sunday, July 14, 13

Page 7: Architecture patterns and practices

How About Practices + Patterns

Sunday, July 14, 13

Page 8: Architecture patterns and practices

Roadmap First

Sunday, July 14, 13

Page 9: Architecture patterns and practices

Consistency

Layering

Isolation

Immutability

Clustering

Buffering

Async

Throttling单结点 多结点

Sunday, July 14, 13

Page 10: Architecture patterns and practices

Sunday, July 14, 13

Page 11: Architecture patterns and practices

So Far, So Good

Sunday, July 14, 13

Page 12: Architecture patterns and practices

Consistency

Layering

Caching

Isolation

Immutability

Clustering

Async

Throttling

Sunday, July 14, 13

Page 13: Architecture patterns and practices

What we do?

Sunday, July 14, 13

Page 14: Architecture patterns and practices

Sure, 1. Scale Up!

纵向扩展

Sunday, July 14, 13

Page 15: Architecture patterns and practices

“I try so hard, I got so far...”

‘cause hardware can’t work well without proper software

Sunday, July 14, 13

Page 16: Architecture patterns and practices

Sunday, July 14, 13

Page 17: Architecture patterns and practices

Sunday, July 14, 13

Page 18: Architecture patterns and practices

Buffering缓冲

Sunday, July 14, 13

Page 19: Architecture patterns and practices

Queuesfucking simple idea, right?

Sunday, July 14, 13

Page 20: Architecture patterns and practices

Queue Everywhere• cpu task run queue

• thread pool task queue

• actors’ mailbox

• TCP stack send buffer /receive buffer

• MOM

• etc.

Sunday, July 14, 13

Page 21: Architecture patterns and practices

Batching分批处理when they slowly move

Sunday, July 14, 13

Page 22: Architecture patterns and practices

Sunday, July 14, 13

Page 23: Architecture patterns and practices

When to batchWhen to flush

Sunday, July 14, 13

Page 24: Architecture patterns and practices

Problem With Nagle Algorithm

Sunday, July 14, 13

Page 25: Architecture patterns and practices

Latency VS.

Throughput

It’s your choice!

Sunday, July 14, 13

Page 26: Architecture patterns and practices

Smart Batchingfocus on the whole pipeline

Sunday, July 14, 13

Page 28: Architecture patterns and practices

DisruptorStart 2 use it today

Sunday, July 14, 13

Page 29: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 30: Architecture patterns and practices

Sunday, July 14, 13

Page 31: Architecture patterns and practices

Throttling限流|flow control

Sunday, July 14, 13

Page 32: Architecture patterns and practices

Rate ControlBackpressure

Sunday, July 14, 13

Page 33: Architecture patterns and practices

Rate Control

Sunday, July 14, 13

Page 34: Architecture patterns and practices

Semaphore

Sunday, July 14, 13

Page 35: Architecture patterns and practices

僵硬 灵活

Sunday, July 14, 13

Page 36: Architecture patterns and practices

Let’s apply

BackPressureButterfly Effect

Sunday, July 14, 13

Page 37: Architecture patterns and practices

Sunday, July 14, 13

Page 38: Architecture patterns and practices

Sunday, July 14, 13

Page 39: Architecture patterns and practices

Sunday, July 14, 13

Page 40: Architecture patterns and practices

表征

位置(反馈)方式

what

where how

BackPressure

load, rt, etc.

ack, nack, etc.hardware, os, app, etc.

Sunday, July 14, 13

Page 41: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 42: Architecture patterns and practices

2 + 2 = ?

Sunday, July 14, 13

Page 43: Architecture patterns and practices

Sunday, July 14, 13

Page 44: Architecture patterns and practices

Sunday, July 14, 13

Page 45: Architecture patterns and practices

Caching缓存

Sunday, July 14, 13

Page 46: Architecture patterns and practices

Why Caching?

Sunday, July 14, 13

Page 47: Architecture patterns and practices

Sunday, July 14, 13

Page 48: Architecture patterns and practices

Cache Everywhere• CPU Level1-3 cache

• Browser-side cache

• Server-side cache

• Business-layer cache

• DAL-layer cache

• Database-level cache

• Reverse Proxy

• DNS

• Name it more...

Sunday, July 14, 13

Page 49: Architecture patterns and practices

Cache Types• Local Cache

• Map

• Ehcache * (BigHeap)

• Redis

• Remote Cache

• Tair *

• Memcached

• In-Memory Data Grid - IMDG

• Coherence

• GemFire

* means Hybrid

Sunday, July 14, 13

Page 50: Architecture patterns and practices

Cache Strategy

Dimension Synchronous Asynchronous

READ Read-Through Refresh-Ahead

WRITE Write-Through Write-Behind

Sunday, July 14, 13

Page 51: Architecture patterns and practices

Caching Tricks• Dummy Value

• non-exist entities in storage

• Versioning

• long-period-cached files

K1

K2

K3

K1

K2

K3

K4 K4

K5 K5

Cache Storage

file1.v1

file1.v2index.html <=> file1

Sunday, July 14, 13

Page 52: Architecture patterns and practices

Case Study - 支付宝双11预充值

我爬...

我也爬...

我跟着爬...

我等?!

Sunday, July 14, 13

Page 53: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 54: Architecture patterns and practices

Async异步

Sunday, July 14, 13

Page 55: Architecture patterns and practices

give me the quote of EUR/USD

here u arebuy 2 lots

transaction result

Story Background...

Sunday, July 14, 13

Page 56: Architecture patterns and practices

Future<Double> rateQuoteFuture = executor.submit(new Callable<Double>() { @Override public Double call() throws Exception { connection.getCurrentValue(USD); } });

try { Double rateQuote = rateQuoteFuture.get(5, TimeUnit.SECONDS); // Blocking wait Future<Integer> future = executor.submit(new Callable<Object>() { @Override public Integer call() throws Exception { if(isProfitable(rateQuote)) connection.buy(amount, rateQuote) else throw new Exception("not profitable"); } }); Integer amount = future.get(5, TimeUnit.SECONDS); // Blocking wait System.out.println("Purchased "+ amount + " USD"); } catch (InterruptedException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (ExecutionException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (TimeoutException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. }

Go Async

Sunday, July 14, 13

Page 57: Architecture patterns and practices

The Pain In The Neckblocking wait

Sunday, July 14, 13

Page 58: Architecture patterns and practices

1. val rateQuote = future {2. connection.getCurrentValue(USD)3. }

5. rateQuote onSuccess { case quote =>6. val purchase = future {7. if (isProfitable(quote)) connection.buy(amount, quote)8. else throw new Exception("not profitable")9. }10. 11. purchase onSuccess {12. case _ => println("Purchased " + amount + " USD")13. }14.}

Go Reactive

Sunday, July 14, 13

Page 59: Architecture patterns and practices

Behind The Pretty Face blocking still exists

Sunday, July 14, 13

Page 60: Architecture patterns and practices

Task Scheduling Matters

Sunday, July 14, 13

Page 61: Architecture patterns and practices

Async & Task Schedule Granularity

•Process•Thread•Actor•Coroutine•Continuation

Sunday, July 14, 13

Page 62: Architecture patterns and practices

Go Non-Blocking

Sunday, July 14, 13

Page 63: Architecture patterns and practices

And Think In Big Picture

Sunday, July 14, 13

Page 64: Architecture patterns and practices

Sir, Yes, Sir.Sunday, July 14, 13

Page 65: Architecture patterns and practices

R All Async Good?

Sunday, July 14, 13

Page 66: Architecture patterns and practices

“Trade A For A” AsyncAnti-Pattern

Sunday, July 14, 13

Page 67: Architecture patterns and practices

A yelled ‘get it done’

B working...

A looking/waiting/smoking...

Sunday, July 14, 13

Page 68: Architecture patterns and practices

Future<Double> rateQuoteFuture = executor.submit(new Callable<Double>() { @Override public Double call() throws Exception { connection.getCurrentValue(USD); } });

Double rateQuote = rateQuoteFuture.get(5, TimeUnit.SECONDS);// Nothing more to do, just wait and return

Sunday, July 14, 13

Page 69: Architecture patterns and practices

Future<Double> rateQuoteFuture = executor.submit(new Callable<Double>() { @Override public Double call() throws Exception { connection.getCurrentValue(USD); } });

Double rateQuote = rateQuoteFuture.get(5, TimeUnit.SECONDS);// Nothing more to do, just wait and return

Why don’t U do it in current thread?

Sunday, July 14, 13

Page 70: Architecture patterns and practices

It’s All About

RESOURCE UTILITY资源利用率是关键

Sunday, July 14, 13

Page 71: Architecture patterns and practices

SEDAA grand master of buffering + async

Sunday, July 14, 13

Page 72: Architecture patterns and practices

Sunday, July 14, 13

Page 73: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 74: Architecture patterns and practices

Sunday, July 14, 13

Page 75: Architecture patterns and practices

Sunday, July 14, 13

Page 76: Architecture patterns and practices

Layering

Isolation

Immutability

Clustering

Buffering

Async

ThrottlingManage Dependencies

Wisely明智地管理依赖

Sunday, July 14, 13

Page 77: Architecture patterns and practices

WhereWeStand Service2

Service1

Service3

Sunday, July 14, 13

Page 78: Architecture patterns and practices

ExceptionStart Small, But Basic!

Sunday, July 14, 13

Page 79: Architecture patterns and practices

What we do after catch?retry?

ignore?throw up?

Sunday, July 14, 13

Page 80: Architecture patterns and practices

Sunday, July 14, 13

Page 81: Architecture patterns and practices

Sunday, July 14, 13

Page 82: Architecture patterns and practices

Timeout Everywhere• Thread.join(long)

• Future.get(long, TimeUnit)

• ExecutorService.awaitTermination(long, TimeUnit)

• CountDownLatch.await(long, TimeUnit)

• RPC Framework, say, HSF or Dubbo

• IO timeout

• you name it...

Sunday, July 14, 13

Page 83: Architecture patterns and practices

Circuit Breaker Pattern

I want it to be automatic!

Sunday, July 14, 13

Page 84: Architecture patterns and practices

Sunday, July 14, 13

Page 85: Architecture patterns and practices

Sunday, July 14, 13

Page 86: Architecture patterns and practices

SwitchesI don’t need you here!

开关

Sunday, July 14, 13

Page 87: Architecture patterns and practices

Sunday, July 14, 13

Page 88: Architecture patterns and practices

trait PartialFunction[-A, +B] extends (A => B) { self =>  import PartialFunction._

  /** Checks if a value is contained in the function's domain. * * @param x the value to test * @return `'''true'''`, iff `x` is in the domain of this function, `'''false'''` otherwise. */  def isDefinedAt(x: A): Boolean ...}

trait Function1[@specialized(..) -T1, @specialized(..) +R] extends AnyRef { self =>  /** Apply the body of this function to the argument. * @return the result of function application. */  def apply(v1: T1): R

http://www.infoq.com/cn/articles/function-switch-realize-better-continuous-implementations

Switch.reduce{

}Sunday, July 14, 13

Page 89: Architecture patterns and practices

Hard Enough

Sunday, July 14, 13

Page 90: Architecture patterns and practices

2. Scale Out横向扩展

Sunday, July 14, 13

Page 91: Architecture patterns and practices

We r gonna Cluster it.

Sunday, July 14, 13

Page 92: Architecture patterns and practices

Symmetric

Stateful

State

Asymmetric

Stateless

ComputationSunday, July 14, 13

Page 93: Architecture patterns and practices

Replicas 复制品, 副本

Sunday, July 14, 13

Page 94: Architecture patterns and practices

Replica means Symmetric

Sunday, July 14, 13

Page 95: Architecture patterns and practices

When It Goes Stateless

Sunday, July 14, 13

Page 96: Architecture patterns and practices

Computational Replicas

Sunday, July 14, 13

Page 97: Architecture patterns and practices

Master-Workers Pattern

Sunday, July 14, 13

Page 98: Architecture patterns and practices

Sunday, July 14, 13

Page 99: Architecture patterns and practices

Sunday, July 14, 13

Page 100: Architecture patterns and practices

Most of the time, Computation and state are so close...

Sunday, July 14, 13

Page 101: Architecture patterns and practices

State Replicas

Sunday, July 14, 13

Page 102: Architecture patterns and practices

Read ScalesRedundancy

Sunday, July 14, 13

Page 103: Architecture patterns and practices

Replication

Sunday, July 14, 13

Page 104: Architecture patterns and practices

Replication Types• Consistency Concerning Replication

• Synchronous Replication

• Asynchronous Replication

• Bandwidth Concerning Replication

• Intra-IDC Replication

• Inter-IDC Replication

• Other Views...

Sunday, July 14, 13

Page 105: Architecture patterns and practices

Load-Balancing

Sunday, July 14, 13

Page 106: Architecture patterns and practices

Sunday, July 14, 13

Page 107: Architecture patterns and practices

So short? Just Stay with me

Sunday, July 14, 13

Page 108: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 109: Architecture patterns and practices

Shards分片,分区aka. Partitioning

Sunday, July 14, 13

Page 110: Architecture patterns and practices

Write ScalesStorage Scales

Sunday, July 14, 13

Page 111: Architecture patterns and practices

Routing

Sunday, July 14, 13

Page 112: Architecture patterns and practices

Lookup Table

Sunday, July 14, 13

Page 113: Architecture patterns and practices

Hashing

Sunday, July 14, 13

Page 114: Architecture patterns and practices

Consistent Hashing

Sunday, July 14, 13

Page 115: Architecture patterns and practices

Sharding Strategy Matters• Capacity Planning

• Capacity Expanding

• State Transferring

• State Access Pattern

• Fault-Tolerance

• etc.

Sunday, July 14, 13

Page 116: Architecture patterns and practices

L.B. Vs. Routing

Sunday, July 14, 13

Page 117: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 118: Architecture patterns and practices

ShitHappens

Sunday, July 14, 13

Page 119: Architecture patterns and practices

Sunday, July 14, 13

Page 120: Architecture patterns and practices

Isolation隔离性

Sunday, July 14, 13

Page 121: Architecture patterns and practices

Bulkhead Pattern

Sunday, July 14, 13

Page 122: Architecture patterns and practices

Sunday, July 14, 13

Page 123: Architecture patterns and practices

One Tab, One Process

Sunday, July 14, 13

Page 124: Architecture patterns and practices

Linux Container

Sunday, July 14, 13

Page 125: Architecture patterns and practices

Single Box In A Cluster

Sunday, July 14, 13

Page 126: Architecture patterns and practices

A Whole Cluster Goes Bad...

Sunday, July 14, 13

Page 127: Architecture patterns and practices

So When you deploy clusters of• Search Service

• HSF/Dubbo Service

• Data Storage Service

• Caching Service(Tair, Redis, memcached...)

• Whatever that’s important or have higher priority, NO Share!

Sunday, July 14, 13

Page 128: Architecture patterns and practices

What Do U Think?

Sunday, July 14, 13

Page 129: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 130: Architecture patterns and practices

Sunday, July 14, 13

Page 131: Architecture patterns and practices

Redundancy冗余

Sunday, July 14, 13

Page 132: Architecture patterns and practices

Symmetric Cluster?

Sunday, July 14, 13

Page 133: Architecture patterns and practices

Symmetric Cluster?

What A Lucky Boy!

Sunday, July 14, 13

Page 134: Architecture patterns and practices

What About Asymmetric Cluster?

Sunday, July 14, 13

Page 135: Architecture patterns and practices

BinaryStar Pattern

Sunday, July 14, 13

Page 136: Architecture patterns and practices

Sunday, July 14, 13

Page 137: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 138: Architecture patterns and practices

Way&Style

Sunday, July 14, 13

Page 139: Architecture patterns and practices

Consistency一致性

Sunday, July 14, 13

Page 140: Architecture patterns and practices

Why Consistency?

Sunday, July 14, 13

Page 141: Architecture patterns and practices

Sunday, July 14, 13

Page 142: Architecture patterns and practices

Sunday, July 14, 13

Page 143: Architecture patterns and practices

Consistency Everywhere• Religion

• Bible

• Brotherhood initiation

• Psychology

• Gambling

• Debating

• Industry

大众就一款⻋车高尔夫,拍窄点就是菠萝,加个屁股就是新桑塔纳和新捷达,继续拍一拍就是速腾和朗逸、再捏一把就是新宝来,扩大一圈就是新帕萨特,再拍一拍就是迈腾,再加大一圈就是辉腾,拍成方的就是途安,加多三个后座就是夏朗,加高底盘就是途观,再撑大点就是途锐,拍扁就是尚酷,搓圆了就是甲壳虫。

Sunday, July 14, 13

Page 144: Architecture patterns and practices

Show Time...

Sunday, July 14, 13

Page 145: Architecture patterns and practices

统一构建原则

Sunday, July 14, 13

Page 146: Architecture patterns and practices

In Framework Design like Spring

Sunday, July 14, 13

Page 147: Architecture patterns and practices

-- Haskell is a pure functional language and even the I/O system can't break this purity.

Sunday, July 14, 13

Page 148: Architecture patterns and practices

Go Consistency When Necessary

Sunday, July 14, 13

Page 149: Architecture patterns and practices

Layering分层

Sunday, July 14, 13

Page 150: Architecture patterns and practices

Why Layering?

Sunday, July 14, 13

Page 151: Architecture patterns and practices

impact

Sunday, July 14, 13

Page 152: Architecture patterns and practices

Layer Patterns Everywhere

Can U Name More?

Sunday, July 14, 13

Page 153: Architecture patterns and practices

Cake Pattern

Sunday, July 14, 13

Page 154: Architecture patterns and practices

Stackable Traits Pattern Decorator Pattern In Scala

Sunday, July 14, 13

Page 155: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 156: Architecture patterns and practices

Immutability不变性

Sunday, July 14, 13

Page 157: Architecture patterns and practices

Sunday, July 14, 13

Page 158: Architecture patterns and practices

Sunday, July 14, 13

Page 159: Architecture patterns and practices

Sunday, July 14, 13

Page 160: Architecture patterns and practices

Persistent Data Structure

Sunday, July 14, 13

Page 161: Architecture patterns and practices

Familiar?

Sunday, July 14, 13

Page 162: Architecture patterns and practices

Event Sourcing

Sunday, July 14, 13

Page 163: Architecture patterns and practices

Capture all changes to an application state as a sequence of events.

Sunday, July 14, 13

Page 164: Architecture patterns and practices

Real World ES• Binlog, HLog . . .

• Kafka’s Storage Strategy

• MetaQ - Java Clone of Kafka,

• LMAX Platform

• Many home-brew tools

• Ultra Messaging Stream Edition(UMS) - Informatica

• Available Projects/Solutions

• https://github.com/eligosource/eventsourced

• https://github.com/sbtourist/Journal.IO

• https://github.com/fusesource/hawtjournalSunday, July 14, 13

Page 165: Architecture patterns and practices

案例分析•TMS编辑和发布的并发控制与潜在冲突

•模板中变量名变更的追踪无案底可查

Sunday, July 14, 13

Page 166: Architecture patterns and practices

Lambda Pattern

Sunday, July 14, 13

Page 167: Architecture patterns and practices

Does Lambda’s face inspire U?

Sunday, July 14, 13

Page 168: Architecture patterns and practices

Sunday, July 14, 13

Page 169: Architecture patterns and practices

Sunday, July 14, 13

Page 170: Architecture patterns and practices

http://www.infoq.com/presentations/High-Performance-Network-Applications-in-the-Capital-Markets

Todd-Montgomery

Sunday, July 14, 13

Page 171: Architecture patterns and practices

Sunday, July 14, 13

Page 172: Architecture patterns and practices

Log VS. JMXYour Opinion?

Sunday, July 14, 13

Page 173: Architecture patterns and practices

--------割--------

Sunday, July 14, 13

Page 174: Architecture patterns and practices

ComposabilityYes, This is a principle :0)

组合

Sunday, July 14, 13

Page 175: Architecture patterns and practices

灵活运用工具的能力比工具质量要重要的多

Sunday, July 14, 13

Page 176: Architecture patterns and practices

It’sNot The Ending, It’s The Beginning...

Sunday, July 14, 13

Page 177: Architecture patterns and practices

推荐书目

Sunday, July 14, 13

Page 178: Architecture patterns and practices

Have Fun & Happy

Sunday, July 14, 13