QCon Tokyo ï¼æ¥ç®åå¾ã®ã¡ã¢ã§ããååã®åã¯ææ¸ããªã®ã§ãæ¸ããããæéãåãã¾ããã§ããã(ã§ããããããã£ãã§ããï¼)
æ£ç¢ºæ§ã¯ã¾ã£ãããã¦ã«ãªãã¾ããã®ã§ããã®ããããæ¿ç¥ã®ãããã ã¾ãããã¤ããã§ãå©ç¨ããã ããã°ã
ãã¨ãã¬ã¼ã³è³æã®ã¡ã¢ãå¤ããèä½æ¨©çã«ãã§ã¢ã¦ã¼ã¹ã®ç¯çãªã®ãã¡ãã£ã¨ãããããã¾ããããææããã°å¯¾å¿ããã¦ããã ãããã¨èãã¦ãã¾ãã
ã¯ã©ã¦ããããã°ã©ãã³ã° - ãã©ãããã©ã¼ã ã¨ãã¦ã®ã¤ã³ã¿ã¼ããã / Gregor Hohpe
- Internet as a Platform
- The bad
- Architects' dream
- Loosely coupled
- Extensible
- Standards-based
- Fault tolerant
- Unlimited computing power
- Ubiquitous
- Developers' Nightmare
- NO Call Stack
- NO Transactions
- NO Promises
- NO Certainly
- NO Ordering Constraints
- Architects' dream
- ACID
- before
- Atomic
- Consistent
- Isolated
- Durable
- today
- Associative
- Commutative
- Idempotent
- Distributed
- before
- Starbucks Does not Use 2-phase Commit Either
- start making coffe before customer pays
- reduce latency
- What happens if ...
- Customer reject drink => Remake (retry)
- Coffee maker breaks => Refund (compensation)
- Customer cannot pay => Discard bevarage (write-off)
- Google way
- GFS: Distribute File System
- 5ãã¿ãã¤ã以ä¸ã®ãã£ã¹ã¯
- Optimize for high bandwidth, sequential reads/writes
- BigTable: Distributed Shared Memory
- åã¯ä½ã§ãå ¥ã
- å: string, counter, byte array
- MapReduce
- Sawzall: Parallel Log Processing
- GFS: Distribute File System
- Tools
- Make the cloud more accesible
- Make the client more powerful
- ...
- Google App Engine
- Programming the Cloud
- different run-time models
- Parallel execution
- Distributed data storage (RDBMSã§ã¯ãªã)
- ....
- [ææ³] ãGoogleãæ¯ããæè¡ããèªãã§ããã¨ç解ãæ©ãå 容ã§ããããããåã¿ç ãã¦ãµã¤ãã®äººã«ä¼ããã®ã¯å¤§å¤ã ãªããGoogle App Engineã¯javaãµãã¼ããããã§ããã
Ebay / Randy Shoup
- Partition Everything
- Pattern: Functional Segmentation
- Pattern: Horizontal Split
- Load-balance processing
- Split data along primary access path: partition by modulo of a key, range, lookup etc
- Corollary: No Session State
- User session flow moves through multiple application pools
- absolitely no session state ni application layer
- Session state maintained in cookie, URL, or database
- Best Practice 2: Asynchrony Everywhere
- Prefer asyncronous processing
- Move as much processing as possible to asynchronous flows
- Where possible, integrate components asyncronously
- Motivations
- Scalability: Can independently scale component A and B
- Availability: Allows component A or B to be temporarily unavailable, Can retry operations
- Latency: Can reduce user experience latency, Can allocate more time to processing than user would toralate
- Cost
- Pattern: Event Queue
- Primary application write data and produces event
- Consumers subscribe to event
- At least once delivery, rahter than exactory once
- No Guaranteed order, rather than in-order
- Idempotency and readback: ã¤ãã³ãèªä½ã«ã¯ãã¼ã¿ãå ¥ã£ã¦ããªãã®ã§ããã¼ã¿ã¯ãã¹ã¿ããèªã¿åºã
- Pattern: Message Multicast
- Search Feeder publishes item updates
- Read item updates from primary database
- Publishes sequensed updates via multicast to search grid
- Search engines listen to assigned subset of messages
- Update in-memory index in real time
- Request recovery when messages are missed
- Search Feeder publishes item updates
- Prefer asyncronous processing
- Best Practice 3: Automate Everything
- Prefer Adaptive / Automated systems to Maunal Systems
- Pattern: Adaptie configuration
- Pattern: Machine Learning
- Dynamicaly adapt search experience
- Feedback loop enables system to learn and improve over time
- collect user behaveor
- Best Practice 4: Remember Everythig Fails
- Build all systems to be tolerant
- Pattern: Failure Detection
- Servers log all requests
- Over 2TB of log messages over day
- Listeners automate failure detection and notification
- Servers log all requests
- Pattern: Rollback
- Absolutely no changes to the site which cannot be undone(!)
- Every features has on/off state driven by central configuration
- Features can be immediately turned off for operational or business reasons
- Features can be deployed "write-off"
- Pattern: Graceful Degradation
- Application "marks down" a resource if it is unavailable or distressed
- Application removes or ignores non-critical operations
- Application retries critical operations or defers them to an asynchronous event
- Embrace Inconsistency
- Brewer's CAP Theorem
- any shared-data system cannot have at most two of the following properties: Consistency/Availability/Partition-tolerance
- This trade-off is fundamental to all distributed systems.
- Chooose Appropriate Consistency Guarantees
- Immediate Consistency: Bids, Purchases
- Eventual Consistency: Search Engine, Billing system etc
- No Consistency: Preferences
- Avoid Distributed Transactions
- no two-phase commit
- Minimize inconsistency through state machines and careful ordaring of database operations
- Reach eventual consistency
- Availabilty ã¯ã®ãã¢ãããã
- Brewer's CAP Theorem
- [ææ³] ãããå®è·µçãªå 容ã§ã大è¦æ¨¡ãµã¤ãæ§ç¯ã®æ©ããã¤ã³ããã¤ã¾ã£ã¦ãã¾ãããååä¸ã®ä¸¸å±±å çã®è¬æ¼ã§ãåºã¦ã¾ããããCAPçè«ã§ãï¼ã¤ã¾ã§ããæç«ããªããã¨è¨ã£ã¦ããé¨åã¸ã®ããããã®ä¼ç¤¾ã®å¯¾å¿ããããèå³æ·±ãã§ããã
ã¢ã¸ã£ã¤ã«éçºãå§ããããã« / Henrik Kniberg
- å¹³éãã: Henrikã®ããã·ã§ã³ã¯ãä¼æ¥ã®æåãå¤ããã
- Agile 㯠å¤åã«å¯¾å¿ããã ãã§ã¯ãªããå¤åã«å¯¾å¿ãã¦èªåãã¡ãå¤ãããã¨
- Optimizeing, debugging and refactoring organizations.
- Agile transitioning
- easiest to lean: learnig by examples
- ãã®æ¬ã§ã¯ã¡ãã£ã¨éãã¢ããã¼ãã§
- Case 1 Bootstrap agile teams
- First ask "Why change?"
- Typical answers
- faster delivery
- Higher quality
- Increased motivation and work pride
- Clearer roles
- Typical answers
- Rough transitioning plan
- typical pattern:
- A: interviews: 1w? (人æ°ã«ãã) ã¯ãã¹ã»ã¯ã·ã§ã³ã§ã¿ããªã«èã
- B: Training; 1day?
- C: Workshops: 1week?
- D: Preparation: 1week?
- E: Launch: 1day?
- F: Folow up & phase out: a few months?
- Interviews
- ãã¯ã¤ããã¼ãã§ãã¢è°è«
- çµç¹ã®é¢ä¿ã¨ããèãããã¾ã«äººãã¨ã«éã£ã¦ããããã
- Root cause analysis
- ãã®ãªãã§æåã«ãªããé¨åãããã¦ãã
- Problem: Teams grouped by component
- ã³ã³ãã¼ãã³ããè¶ããåé¡ã¸ã®è²¬ä»»ããªã
- Half-day training
- 1 対 ãããã
- Half-day workshops
- ã°ã«ã¼ããã¨
- Goal: Feature teams
- æ©è½ãã¨ã®ãã¼ã ãã¤ãã
- æ©è½ã横æããè·è½ã®ãã¼ãã£ã«ãã¼ã
- preparation
- Transitining Team: ã¿ã¹ã¯ãªã¹ããä½ã ( Transitioning backlog ) - Status/What to do/Definition of done
- Who defines the teams?
- Option1: Teams defines centrally
- Option2: Teams form themselves from scratch
- Option3: 1+2: èªå·±çµç¹åã許ã
- Self-organizing to form new teams
- Preliminary team allocation => After a week in the kitchen
- Co-locate each team & launch sprint
- Case 1 - key points
- Look before you leap - Interviews - Coach learns / Traning - Coach teaches / Workshop - coach facilitate
- Involve people
- Incremental process improvement
- First ask "Why change?"
- Case 2: Speeding up product development
- Process cycle efficiency = value add time / cycle time
- è·è½ã§ã¾ããã¦ããã¨ãã¤ãã©ã¤ã³ãé·ããªããåºåãé
ããªã
- Scrum ã«ãã
- ã«ã³ãã³ãå°å ¥ãã¦å¨åº«ãæ¸ãã
- ãªã¹ã¯
- Games out of date = Missed market windows / Demotivated teams / Overhead costs
- Case 2 - Key points
- Speed up product develomnent is usually a matter of improving the process rather than adding people.
- Value stream mapping is a great tool for spotting people.
- Push scheduling + too much WIP (work in progress) is usually root cause
- Beware suboptimization!
- change
- ã¾ãããªããå¤ããã
- [ææ³] Henrikã®èã«ãªãã¾ããããã¶ããã°ããããããèããªãã¨ãææ³ãæ¸ãã¾ããã
ããã«ãã£ã¹ã«ãã·ã§ã³
- ãããªã¹ã
- Henrik: å欧ã§ã¯ãã¢ã¸ã£ã¤ã«ããã»ã¹ã¨ãã¦Scrumãæ¡ç¨ããäºä¾ãå¤ã
- ããããã¨
- éçºãã¼ã ã¨ãã¸ãã¹å´ã®ã³ãã¥ãã±ã¼ã·ã§ã³ãæ¹åãã
- ããã§ãå¥ã®åé¡ãããã£ã¦ãã
- XPã®ãã©ã¯ãã£ã¹ããã¨ãã°TDDãªã©ãå¿ è¦ã«ãªã
- Leanã® Value Stream Mappingã¨ã
- æ¯æ°æªåã®å½±é¿: 以åã¯æ¹åã®è©±ã ãã ã£ããããã£ã¨å¤§å¹ ãªå¤é©ããããã«ãå¿ è¦ã«ãªã£ã¦ãã
- ããããã¨
- Hohpe: æ¢ã«ç¥ã£ã¦ãããã¨ããªãµã¤ã¯ã«ãã¨ããããã
- ã¯ã©ã¦ãã¨ã
- ããã¯ãæ°ãããã®ã ãããï¼æãããããã®ã«ãæ°ããååãä»ããã ãã§ã¯ãªãã®ãï¼
- ã©ã¡ãããã
- æ¬è³ªçãªã¢ã¤ãã¢ã¯ãã¾ãæ»ã£ã¦ãã
- æè¿ã¯ãã©ã³ã¿ã¤ã ã®éè¦æ§ã«æ³¨ç®ããã¤ã¾ã£ã¦ãã
- ã³ã¢
- åæ£
- ã¨ã¼ã¸ã§ã³ã
- ãã£ã¹ã«ããª
- ã½ããã¦ã§ã¢ãæ¸ããã¨ããã®ã¯ä¸é¨ã§ãããªã
- åæ£ã®ä¸çã§ã¯ãã³ã¼ããæ¸ãã¦ãããããã¤ããã¾ã§ãããããªã
- Randy: ã¹ã¿ã¼ãã¢ããã®ã³ã³ãµã«ãä½ä»¶ããã¦ãããã
- å½åããåæ£ã¨ãã¹ã±ã¼ã«ã¢ããã®è©±ãåºãæ代ã«ãªã£ã
- è¤æ°ã®è¨èªï¼ã¤ã³ãã©ã§ãããã¨ãã mixç°å¢
- ãããã¤ã¡ã³ã: ã¯ã©ã¦ãã³ã³ãã¥ã¼ãã£ã³ã°
- ä»å¾ï¼å¹´éã«ãå¤ãã®ã¢ããªã±ã¼ã·ã§ã³ãã¯ã©ã¦ãã®ä¸ã«å ¥ããgoogle/Amazonãªã©ã®ã¯ã©ã¦ããç¬èªã®ã¯ã©ã¦ã(EBayã®ãããª)ãã¦ã¼ãã£ãªãã£ã³ã³ãã¥ã¼ãã£ã³ã°
- Dylan
- Martin Fowler ã å京ã®ããã«ã§è¨ã£ã¦ãããã¨
- Rod ã å京ã®ããã«ã§è¨ã£ã¦ãããã¨
- Empowerment
- ãã¼ã«ãã¢ã¸ã£ã¤ã«åããªã¼ã³ã«ãªã£ã¦ãããç¹å®ç¨éåãã®ãã¼ã«
- Empowerment
- Floyd
- Web 2.0
- ãªã¼ãã³ãã©ãããã©ã¼ã ãããã¢ããªã±ã¼ã·ã§ã³ã»ãã©ãããã©ã¼ã ã¸ã®å¤å
- ã¯ã©ã¦ã/RIA
- Java
- 飽ãã¦ããï¼: ãããJavaãã¤ã¾ããªããªã£ãã®ã§ã¯ãªããã¿ã¹ã¯ãå®å®ãã¦ãã
- Webã«ã Google Apps ã App Engine ãªã©ã§ã¦ãã
- ã¯ã©ã¦ã
- ä¸å°ä¼æ¥ã«ãå¹æçã«ä½ã³ã¹ãã§ã§ããããã«ãªã£ã: ãã¼ã¿ã»ã³ã¿ã¼ã®ãã¨ãèããªãã¦ããã®ã§
- Web 2.0
- Hohpe
- ã¯ã©ã¦ãã«ãªã
- ã¬ã¬ã¼ã¸ããã§ããæ°ãããã®ãåºããããã«ãªã£ãã
- ã³ã³ã½ãªãã¼ã·ã§ã³ã¨ãã©ã°ã¡ã³ãã¼ã·ã§ã³ã®ãµã¤ã¯ã«
- ã¯ã©ã¦ãã«ãªã
- Rod
- Grails <- Javaã³ãã¥ããã£ã®ãããé²å±
- SpringSourceãã¯ã©ã¦ã対å¿ã®è£½åã®çºè¡¨ãã²ããã¦ãã
- Hohpe
- è´è¡
- è´è¡ã«Web系以å¤ã®äººãã»ã¨ãã©ããªãã®ã¯æ®å¿µã
- Randy
- EBayã®ããã¯ã¨ã³ãã¯Webç³»ã§ã¯ãªã
- å¤ããè¦ãã°Webãµã¤ãã ãã©ãè£ã«ã¯é¢ä¿ãªãå¦çããããããã
- Hohpe
- Webã®å®ç¾©ã«ãããã©ãä¾ãã°ããã¯ã¨ã³ãã®ã³ã³ãã¼ãã³ããä½ã£ã¦ãã人ããhttpã«è¦å´ãã¦ãããã¨ããããã
- Randy
- å¤ãã®ä½æ¥ã¯ http ã¨ã¯å ¨ãé¢ä¿ãªãã解æç³»ã¨ã
- éWebçãªãªãã¬ã¼ã·ã§ã³ããã
- è´è¡
- Scalaã¯ã©ãã£ãã
- ???
- é¢æ°ç³»ã§ãErlangã¨ã㯠åæ£å¦çã«é©ãã¦ãããããã¢ããªãåºã¦ãã¦ãã
- Hohpe
- Henrik
- ããããªãã¼ã«ã使ããªããã°ãªããªã
- ã¸ã§ãã©ãªã¹ããå¿ è¦ãéå ·ãå¤æã§ãããã¨ãå¿ è¦
- Hohpe
- ãã¶ã¤ã³ã³ã³ã»ãããç¥ã£ã¦ãããå¿ è¦ããã
- ãã¹ããã©ã¯ãã£ã¹ãä½ãã®ã¯æéããããä½æ¥
- Javaã¯10å¹´ããã£ã
- æ大ã®å¶ç´ã¯äººéã®å¦ç¿è½å
- Dylan
- æé©ãªãã¼ã«ãæãã¦ããããã¼ã«ãéçºãã¦ãããã¨ããã®ã ããã©
- ã³ã³ãµã«ãããªããªãã
- æé©ãªãã¼ã«ãæãã¦ããããã¼ã«ãéçºãã¦ãããã¨ããã®ã ããã©
- è´è¡
- ãã¹ãã¯ãã¾ãå¤ãã£ã¦ããªãããã«æãã
- Hohpe
- ãã¹ãã¯ï¼ã¤ã®ä½æ¥
- æåã®ç¢ºèªã®ããã®ãã¹ã
- éçºã®ä¸é¨ã¨ãã¦ã®ãã¹ã: BDD
- ãã¼ã«ã®åé¡ã§ã¯ãªãããã¼ã«ãä½ã人ã®é²å
- ã©ã³ã¿ã¤ã
- ããã§ããã¹ãããã
- ãã¹ãã¯ï¼ã¤ã®ä½æ¥
- Henrik
- éçºè ã¨ãã¹ã¿ã®å¢çãææ§ã«ã
- ãã¹ã¿ã¯èªåãã¹ãã§ããªãã¨ããããã¹ãã§ãããã©ãããéè¦
- ãã¸ãã¹å´ã¨ã®è·é¢: Leanã§è¿ã¥ãã¦ãã
- Hohpe
- ããªãã ãåãSpecæ¸ãã
- Randy
- Ebayã§ãã¾ããã£ãæ¡ä»¶ã¯ããã¸ãã¹ã¨éçºè ãè¿ãã£ãã±ã¼ã¹ã
- éã«ãã¾ããããªãã£ãã®ã¯ãåé¢ããã±ã¼ã¹
- Hohpe
- 10å¹´åã®ãã¹ãã±ã¼ã¹ã¯ç¾å ´ã§ãã¯ããæ¸ããã±ã¼ã¹
- ãã¼ãºãããã£ã¦ãã人ãæ¸ãã¦ãã
- ããã§è§£æ±ºã§ãã¦ããªãã®ã¯ãåæ£å¦çã¨ãã¯ã©ã¦ãã¨ãã:AppEngineã¨ãã§ã¾ãã§ããããã«ãªããã
- 10å¹´åã®ãã¹ãã±ã¼ã¹ã¯ç¾å ´ã§ãã¯ããæ¸ããã±ã¼ã¹
- [ææ³] ãããããããµãããããã«ãªãã¾ãããHenrik ã ãããããªãã¼ã«ã使ããªããã°ãªããªããéå ·ãå¤æã§ãããã¨ãå¿ è¦ãã¨è¨ãã¨ããã«æ¶ãã¾ãããå¤ãã®éå ·ãç解ããä½ã£ã¦ãã人ã¨ä½¿ãããªãã¦ãã人ããªã¹ãã¯ãããªãã¨ãããã¸ã§ã¯ãã¯æç«ããªãã¨æãã¾ããæãã¾ããæãã¾ãã