41
© FreeWheel 2011 Rails 3+ĉB2BûíwaĠl ģ@ freewheel.tv ĶĄL@ freewheel.tv 2012.04

02s0102基于rails的大型b2 b系统架构优化 于冰赵晓锋

Embed Size (px)

DESCRIPTION

rails 性能优化

Citation preview

© FreeWheel 2011

pģRails3+ĉB2BûíwaĠl

ģ�@freewheel.tv ĶĄ[email protected] 2012.04

+T

!  FreeWheely�

!  tßëĴgŊéwa�Ë

!  RailsĮFreeWheel3Ĝğ�

!  Rails�(#"��

!  �� !

FreeWheely�!

What does FreeWheel do?

•  �±7ĮĀÛ°dVgĹP²å •  �k7ĮĀÛ°��� •  ė�Įô¦f30%3ĮĀÛ°��ç^ÝÅ

•  ¥ê(�àò¦Ħ3~ę •  ��!/comScore)��

What is MRM/RPM?

• Monetization Rights Management® •  Û°��ïI-'

•  Revenue & Payments Management® •  hìgĹPc�

6

��1�$�

Ŋéwa�ËgtßëĴ!

FreeWheel MRM ����

9

MRM

Ad#Server

UI/API:#Adver-sing/Inventory

Ad#Server

ETL#Repor-ng

Ad#Tag#/#Request Ad#Manager

DB:#OLTP/OLAP

Inventory#Forecast

Ad#Server Ad#Server

Log#Files

Video#Metadata

Technology Stacks

10

Infrastructure SYSTEM&

Mostly#Linux#(RHEL#5) STORAGE&SAN#+#NAS

NETWORKING&LB#/#Akamai

Integration Flash&(AS2/AS3)& iPhone/iPad&(ObjAC)&

Android&(Java)& Silverlight&(C#)&

HTML5&/&JavaScript&

Quality

Cucumber

Selenium

Log&Replay

REGRESSION&MRM/RPM&UI&

VI&Ad&Server&

ETL&ReporQng Forecast&

Rules&Engine&

Service

Message#Queue(ZMQ)

OLTP#(MySQL)

#OLAP#(Infobright)

Cache#/#Fast#Storage#(Memcached/LevelDB/MongoDB)

Task#Scheduler#(crontab,#etc)

#Search##

(Lucene#/#Solr)

Ad&Server&(C++)

BUSINESS&INTELLIGENCE&&

ETL&ReporQng&Forecast&

(Map#Reduce#like,#C++,#Python)

MRM/RPM:&UI/API (RoR,#jQuery,#Java)

Management&&&Monitor&Portal&(Python,#jQuery,#SQLite)

#Analy-cs##

(MicroStrategy)

BVI/BII/Data&Manager (Ruby,#etc.)

Open Source Building Blocks

11

�� • OĬ3ĔúªĉgĔú¢r

•  ÍÅ��ĔúøègĔú���¿i�yl

• ��3İ�6Uptime: 99.99% •  ���#y.3p'É�#ĎĠl •  /ċ�ÄĤwa •  ûíx�

• à�3İ� •  çUċ­gĆ¡�ÒÑċ •  ��%� 4Insight5

• Ŀ��ĵ •  me�Ü + =1=�Ü

• C²å�C�±Ĺ# •  íĕp'wa

12

������ •  Since 2010 • -QwaÐļį

•  S.W.A.T team •  Top Guns/Code Monkeys

• wałag�âħĉ!• DevOps: ĥīõðA§·hŎ

13

UI ����

14

•  RPM+MRM UI • waõj�,£Ŀ��ľ

•  Ruby on Rails + Sinatra •  ,7 JS/CSS

• p'Mú •  �. •  4 �¿ÿ •  �[�Ô •  ��& •  …

• ğkéđR�

RailsĮFreeWheel3Ĝğ� !

RailsĜğ�D�Ô

!  2007®7Ī�ÖpģRails 1.2.3�D

!  MRM UIûí,£��l»Ú�

�0"��� ������ Rails��

�����

#"����

%ù!

17

Quick-and-Dirty

!  Ĕú½9�Business Driven� ! 2� Ĕú�âDij

!  B2BĔúOĬ<

!  ReleaseŃ³> !  ²�5~6Ń3+ Release

!  ¥Ń3Point ReleasegBugfix

! “5ĕY"Őć”3î& !  RailsÁEOĬĔúûí3�]��

!  ¤Ģ�ņ3Best Practice

RailsĜğ“ıú”

!  Railsĥ5ÆG� ��!!  ̼ĺÓKĂ�¬��ĨĹ#Ê!

!  “ÈIJ”3workaround

!  Fat Model !  ,£�;ċ�!

!  CûíĥC���łğċ�!!  ValidationsgCallbacks�ğ!

!  +�)View ! ���*�Partial�Î�+�3ą÷{

!  RHTML/HAML/ERBĥJavaScriptÀď~*

UIē©Ø�!

20

RailsĜğwaĠl

ûíÏsĥ,£ła

!  Rails1.2 (March, 2007) => Rails3.0 (April, 2011)

!  Bundle6Scopes6I18N6Rack-based6Middleware…

!  MRMĥRPM`ğp'wa�ĥ̼ĺÓ`Ă!

!  Rails3.1Ïs72Asset Pipeline

!  JavaScript !  jQuery 1.2 => jQuery 1.4.4

! pģjQuery-UI3Widgets

# Commits LoC LoC(Exclude Vendor)

344 +69322, -62147 +41559, 43750

Rails3.0Ïs\Ŏ�

!  3YRelease�12YÂĪ

!  LoC in Branch

!  LoC in Trunk

# Commits LoC

592 +13137, -11324

!  p'Mú�SSO�.64 ��ğk¿ÿ�ûíAPI�áã�ful�…

!  Module�ĕYMini3RailsĜğ��Ę:�īĊ

!  Application�ġp'MúĥCYModuleŋ�3Bundled APP

Múlĥª�l

Model�Controller�

View/Helper�

Biz Logic�Resources�

CONF

API

Module�

Model�Controller�

View/Helper�

Biz Logic���

Resources�CONF

API

Module�

Components�Shared 3rd Plugins� Shared Resources�Shared Model� Controller/Dispatcher� View/Helper�

SSO� System API (Search, i18n, …)�User Permission� Tasks�

BizLogic�

Model�Controller�

View/Helper�

Biz Logic���

Resources�CONF

API

Module�

ª�lŋŅØ�!

25

ĮńĜğŀ�Õğmount}¹ºKD1�ìModule!

Gem|�ModuleĖ�!

Asset Pipeline}�æŇĨ÷{�ķModuleŋĻ!

Ĕú¢rªĉ4Business Model5

!  Ĕúĥà�HøBăK��Let Model be DAO� !  ActiveRecord ModelzJ�$¾Business Logic

!  ylActive Record3CallbacksgValidations

Rails MVC with Business Model

AcQon&Controller

AcQon&View

Business&Model&

AcQveRecord AcQveRecord

Business&Scenario&

Widgets&

1. ěn�ě×7ğ3Validation�0,£ĊàĥGF�CÑ��;ċ�� �

Ĕú¢rªĉ—�Model,£!

27

Ĕú¢r3Validation6ě×7ğ!

2. �Ç�Ĕú¢r%ýKĹÑ�čĒBvalidationōif/else¯?��Ľb!�3. @q�OĬ3Ĕú¢rÃęÕModel,£�2ĩ�ĩ��LoC>2k)!

Ĕú¢rªĉ—ĈBusiness Model,£!

28

Business Model�

ü×3Validation�

3. X�ċ�.YBusiness Model3ČR�oĝā´äBusiness Model �

2. :�ċ��ìĔú¢r���ĘĞĢ�ì3Business ModelBă �

1. �;ċ�,£üØ7ğ�ݶ�;ċ��¨õj“þŏ” �

Widgets

!  ¸�s3µ=MVC�w !  �ğÙ{½9ªĉ�pģjQuerygjQuery UIa|

!  JSON + Restful

!  p'ŋ{ !  Ōą�<3�Ŏ.Ħ

!  Grid, Tab, Calendar, Layout, Accordion, Wizard, Dropdown…

!  Ĕú�{ !  CYp'ŋ{3�h

!  Ĺ#v!głĭ

!  Òý«ĕYñĸĔú¢r��3�Ŏ

Widgetswa!

30

Base

Components

Grid Toolbar Form AdvancedSearch

Widgets

AdProduct ContentTargeting

GeoTargeting Budget

Schedule

... ...

Lang jQuery I18n FW Core

Widget,£-�,£!

31

Widget—Ĉ,£!

32

v!FormWidget�

�8Ù{!

ZŁ�ĉ3ÞÅField�

Widget—ʼn8Ě!

33

ʼn8ĚÞÅW×!

)|Widget�

WidgetsĐØ!

34

Unicorn +389:;<

!  ĠlµÕğLighttpd + FastCGI

!  Unicorn –  An HTTP server with 2k+ lines of pure ruby code –  Better memory control by shared memory, forking –  Copy-on-write with REE 1.8.7

–  �]��2(Twitter, Github…)

�� !

ijóö�

! 2DCI4Data, context and interaction5ª×�ÜĥĜğ!

!  çUʼn9l�ÜNS¡

!  ,£ła!

!  �ľ,£�!

!  CSSK�ła!

!  FreeWheel UIûíp'wa!!  C�±Ā�ňûíĥª�3wa_ğĥ,£Oğ!

!  8ľlĔúĹ�!

Multitenant Architecture Easy Customization Better Access