osdc.tw - building a platform from open source

70
Building a platform from open source

Upload: dustin-whittle

Post on 06-May-2015

1.816 views

Category:

Technology


0 download

DESCRIPTION

Open Source Developer Conference Taiwan- Building a platform from open source Presented by Dustin Whittle

TRANSCRIPT

Page 1: OSDC.tw - Building a platform from open source

Building a platform from open source

Page 2: OSDC.tw - Building a platform from open source

SYMFONY-PROJECT.COM | DEVELOPER.YAHOO.COM

Page 3: OSDC.tw - Building a platform from open source

Overview

Why symfony?

symfony vs. ysymfony

Social Search: Delicious and Answers

International: ShopGenie.co.uk, FoxyTunes, Digu

Yahoo! Open Strategy Developer Tools

YUI, Design Patterns, Tutorials

Data & Social APIs YQL: Yahoo! Query Language

Page 4: OSDC.tw - Building a platform from open source

Who am I?

Working with symfony since open source symfony Core Team Member

Responsible for the development and support of ysymfony at Yahoo! Y! Answers, Delicious, Y! Widgets, Y! Application Platform

Developer advocacy for Yahoo! Developer Network

Contact [email protected]

@dustinwhittle

Page 5: OSDC.tw - Building a platform from open source

DEVELOPER.YAHOO.COM EXAMPLES | TUTORIALS | CODE SAMPLES

Page 6: OSDC.tw - Building a platform from open source

YAHOO! IS POWERED BY OPEN SOURCE TECHNOLOGIES

FREEBSD | LINUX | APACHE | PHP | MYSQL | BUGZILLA | HADOOP | SYMFONY

Page 7: OSDC.tw - Building a platform from open source

YAHOO! EMBRACES OPEN STANDARDS

W3C | MICROFORMATS | OAUTH | OPENID | OPENSOCIAL

Page 8: OSDC.tw - Building a platform from open source

YAHOO! GIVES BACK TO OPEN SOURCE

YUI | BROWSER PLUS | DESIGN PATTERNS | R3 | YSLOW + PERFORMANCE RULES

Page 9: OSDC.tw - Building a platform from open source

YAHOO! SHARES ITS DATA THROUGH OPEN APIS AND WEB SERVICES

YQL | PIPES | BOSS | CONTACTS | UPDATES | MAIL | DELICIOUS | FLICKR | UPCOMING | HOTJOBS | MAPS | FIREEAGLE | GEOLOCATION | LOCAL | TRAFFIC | WEATHER |

MUSIC | ANSWERS | SHOPPING | FINANCE | TRAVEL

Page 10: OSDC.tw - Building a platform from open source

YAHOO! ENGAGES COMMUNITIES WITH OPEN HACK EVENTS AROUND THE WORLD

Conferences | Hack Days | HackU | Tech Talks | YDN Theater

Page 11: OSDC.tw - Building a platform from open source
Page 12: OSDC.tw - Building a platform from open source

Users  

Load  Balancers  

Frontend  

PHP  APC,  PEAR,  PECL,  Custom  Extensions  

Linux  

ysymfony  /  YUI  Apache  Custom  Modules  

Backend  

MySQL/Memcache   YQL  /  Web  Services   Ad  API   User  API  

Page 13: OSDC.tw - Building a platform from open source

Why a frontend platform?

Rasmus says “frameworks are not well suited for Yahoo!” Build applications to requirements

Do exactly what you need: no more, no less

Understand that frameworks add a lot of overhead

Choosing functional components is a better t

Despite choosing open source or building your own Everyone uses a framework

If you use open source, use only the pieces you need

Page 14: OSDC.tw - Building a platform from open source

Yahoo! needs from a frontend platform Fit existing environment (RHEL/PHP5/Apache) Development Cycle – How easy to develop, test, and

deploy? Clean separation between data, logic, and display (MVC) Independent model layer to t service oriented

architecture Extensible and pluggable Internationalization and localization support Detailed documentation and active community of

support Open source and ability to contribute back

Page 15: OSDC.tw - Building a platform from open source

Why a framework at all?

Another software layer (ysymfony, yphp, yapache) Factors out common patterns

Code Layout Conguration URL Routing Authentication / Security Form Validation / Repopulation Internationalization / Localization

Encourages good design Abstraction > Consistency > Maintainability

Page 16: OSDC.tw - Building a platform from open source

The choice to adopt symfony?

Philosophy Full-stack framework for building complex web

applications Adopt best ideas from anywhere, using existing code if

available (Mojavi, Prado, Rails, Django)

Design Clean separation between Model, View, and Controller Controller using modules and actions Views using templates in straight PHP with helpers Easy to reuse view modules to compose a page

Layouts, Components, Partials, Slots

Page 17: OSDC.tw - Building a platform from open source

The choice to use symfony

Congurability / Flexibility Features we do not want are easily disabled

Use of factories for easy customization

Documentation / Support Community The Denitive Guide to symfony

Askeet, Jobeet, Cookbooks, Advents

Active community with wiki, mailing lists, forums, irc channel

Page 18: OSDC.tw - Building a platform from open source

Why ysymfony for Yahoo! teams?

Eliminate common patterns by adding a layer on PHP Code layout/structure (MVC)

Conguration

Internationalization

ysymfony is just a toolkit Learn one set of tools

Shift between multiple projects

Consistency

Long term maintainability through platform

Page 19: OSDC.tw - Building a platform from open source
Page 20: OSDC.tw - Building a platform from open source
Page 21: OSDC.tw - Building a platform from open source

How Yahoo! uses symfony Full Stack

Yahoo! Bookmarks Yahoo! Answers Delicious Yahoo! Widgets Yahoo! Application Platform ShopGenie.co.uk, Foxytunes, Digu Internal Dashboards + Reporting Tools

Components Dependency Injection Forms Caching (APC/Memcache) Routing

Page 22: OSDC.tw - Building a platform from open source
Page 23: OSDC.tw - Building a platform from open source
Page 24: OSDC.tw - Building a platform from open source

A look at Yahoo! Answers

http://answers.yahoo.com

Yahoo! Answers is the largest collection of human knowledge on the Web with more than 135 million users and 515 million answers worldwide (Yahoo! Internal Data, March 2008).

Yahoo! Answers is the 2nd ranked education & reference site on the web (comScore)

Available in 26 markets and 12 languages

Page 25: OSDC.tw - Building a platform from open source

Yahoo! Answers at the beginning

Started as a small development team on PHP4 from a fork of Yahoo! Taiwan Knowledge+

Launched December 2005 by December 2006 there were 60 million users and 65 million answers

The code base eventually became difcult to maintain and iterate new features

Large distributed development teams (US / UK)

Page 26: OSDC.tw - Building a platform from open source
Page 27: OSDC.tw - Building a platform from open source
Page 28: OSDC.tw - Building a platform from open source
Page 29: OSDC.tw - Building a platform from open source
Page 30: OSDC.tw - Building a platform from open source
Page 31: OSDC.tw - Building a platform from open source
Page 32: OSDC.tw - Building a platform from open source

The big picture

A complete platform for building web applications from frameworks PHP Framework

JavaScript Framework

CSS Framework

UI Design Patterns + Best Practices

Development Tools (logger, proler, debugger, docs)

Unit + Functional Testing Frameworks (LIME / YUI Test)

Deployment Tools (rsync deployment system)

Page 33: OSDC.tw - Building a platform from open source

What does Yahoo! change? Minor changes to t our environment

Most changes are easily implemented via factories/plugins

Dropped the ORM and pushed down the stack (SOA) Added a parallel API Dispatcher (ysfAPIClientPlugin)

Added dimensions to congurations (ysfDimensionsPlugin) Integrated R3 translation/template management (ysfR3Plugin)

R3 - http://developer.yahoo.com/r3/

Created a build and deployment solution (ysfBuildPlugin) Uses internal tools for packaging/deployment

Integrate support for Y! User Interface libraries (ysfYUIPlugin)

Page 34: OSDC.tw - Building a platform from open source

Propel or Doctrine or ???

No ORM for large projects

Doctrine for medium sized projects

Service Oriented Architecture Platforms/Backends as services (reusable to all)

Thin Controller/Fat Model (where model == services)

Use PHP as the frontend glue No heavy lifting in PHP = Push down the stack

Java/C++/Erlang + JSON/XML

Page 35: OSDC.tw - Building a platform from open source

Localizing with dimensions

Cascading Conguration based on YAML Framework -> Project -> Application -> Module

Extending the cascade to be based on dimensions Dimensions can be anything (and can be chained together)

Data Center + Environment for customizing congurations

Culture for localizing user interface + data

Theme for customizing look and feel

User info (is user on corporate intranet?)

Caching

Page 36: OSDC.tw - Building a platform from open source

A build and deployment system

Aggregate and minify stylesheets and javascripts Rewrite templates, css, js for CDN (Akamai, S3, …) Generate translations for congurations + templates Generate conguration cache Aggregate core classes + remove debug statements Run lint, unit, functional tests Package applications as .tgz Deployment via packages Integrated with Yahoo! internal tools

Page 37: OSDC.tw - Building a platform from open source

Debug Toolbars

Page 38: OSDC.tw - Building a platform from open source

Hello World Performance

Hello world benchmarks are generally not useful You don’t use a framework to write hello world

die(‘hello world’);

Performance is relative to the features you use ORM

I18N

Output Escaping

Forms/Validation

Ability to scale != performance

Page 39: OSDC.tw - Building a platform from open source

What does it mean to scale?

A system whose performance improves after adding hardware, proportionally to the capacity added, is said to be a scalable system.

High Availability + Scalability + Performance Bigger dataset, more trafc, maintainable Not about performance

PHP is slow, but it is very rarely your bottleneck

Languages do not scale, architectures do Planning to grow and planning to fail

Capacity Planning Business Continuity Planning

Page 40: OSDC.tw - Building a platform from open source

Scaling – The basics in PHP PHP is rarely the bottleneck (even though it can be slow)

“Most performance comes not from the language, but from application design” – Rasmus

Share Nothing Architecture Independent, self-sufcient, no single point of contention No local storage = No PHP Sessions

Use a database (works for distributed) Use a small signed cookie (ideal)

Important data in database Individual expiration on session objects Small data items

Use a distributed cache Memcache

Forget about small efciencies Premature optimization is the root of all evil.

“ vs. ‘, echo vs. print

Page 41: OSDC.tw - Building a platform from open source

Scaling Databases – The basics

Drop the ORM It’s a choice of convenience over performance

Master/Slave Replication First steps Helps with reads, writes are still bottleneck

Partitioning Segmenting data

Sharding (horizontal partitioning) Segmenting data onto different physical machines Make problems smaller, easier to grow

Page 42: OSDC.tw - Building a platform from open source

Improving latency with Caching

Always use PHP opcode cache (APC, Xcache, etc) Use for routing and i18n cache

Memcache (distributed cache) Use for view cache

Distributed invalidation can be a pain sfViewCacheManager makes this easy!

Be intelligent about cache_keys (uri, user, state)

There is a ne line to caching At what point do you spend more time managing the

cache, than reading from it?

Page 43: OSDC.tw - Building a platform from open source

Tweaking Performance

Do not use .htaccess (move to real apache cong) Set a minimal include path Increase realpath_cache_size + realpath_cache_ttl Use apc.stat=0 Don’t use features you do not need

Disable in settings.yml / factories.yml

Use core_compile to aggregate classes to reduce le i/o Remove debug statements + optimize le lookups

sfOptimizerPlugin / project:optimize

Use @routeName and use caching for factories

Page 44: OSDC.tw - Building a platform from open source

Symfony (v2)

Symfony 2 is a set of cohesive yet decoupled components This makes it much easier to use single component to solve

a single problem Which makes it easier to build micro frameworks that solve

very specic problems Yahoo! Teams generally prefer solutions that are specic to

their exact problem Selling the full stack can be difcult when a team only wants a few

components

Symfony 2 is the right direction, even if it breaks backwards compatability

symfony-reloaded.org

Page 45: OSDC.tw - Building a platform from open source
Page 46: OSDC.tw - Building a platform from open source

Do it yourself for cheap

Open source software = Free Apache PHP MySQL Memcache / Perlbal / MogileFS / Squid / Gearman symfony / Doctrine / Propel / Swift Nagios / Cacti

Amazon Shared Infrastructure = Cheap EC2 Cloud S3 Storage + Cloudfront SimpleDB

Page 47: OSDC.tw - Building a platform from open source
Page 48: OSDC.tw - Building a platform from open source

What is Yahoo! Developer Network? The Yahoo! Developer Network offers open source tools

and open data APIs to make it easy for developers to build applications and mashups.

50+ APIs / Web Services Developer Dashboard to create/manage Oauth applications Tutorials + Code Samples on using our apis Complete API Documentation

Yahoo! User Interface libraries ASTRA Flash Components Design Patterns Library Evangelism: Conferences / Theater / Blogs / Events

Page 49: OSDC.tw - Building a platform from open source
Page 50: OSDC.tw - Building a platform from open source

JavaScript Framework Utilities - YAHOO, Dom, Event, Animation, Browser History

Manager, Connection Manager, Cookie, DataSource, Drag and Drop, Element, Get, ImageLoader, JSON, Resize, Selector, Loader

Controls / Widgets - AutoComplete, Button, Calendar, Charts, Color Picker, DataTable, ImageCropper, Rich Text Editor, Slider, Uploader

Container (Module, Overlay, Panel, Tooltip, Dialog), Layout Manager, Menu, TabView, TreeView

Debug – Logger, Proler, Test

Y! Developer Network – YUI Javascript

Page 51: OSDC.tw - Building a platform from open source

CSS Foundation Reset - Neutralizes browser CSS styles

Base - Applies consistent style foundation

Fonts - Foundation for typography and font-sizing

Grids - Thousands of wireframe layouts

User Interface Design Patterns Library Proven solutions to common interfaces

http://developer.yahoo.com/ypatterns/

Grade Browser Support / Progressive Enhancement

Y! Developer Network – YUI CSS

Page 52: OSDC.tw - Building a platform from open source

More than 275 functional examples http://developer.yahoo.com/yui/examples/

YSlow + Performance Rules http://developer.yahoo.com/performance

YUI Blog http://yuiblog.com/

Mailing List @ Yahoo! Groups http://tech.groups.yahoo.com/group/ydn-javascript/

Y! Developer Network – Documentation

Page 53: OSDC.tw - Building a platform from open source

A Query Language for the Web

SELECT    *  FROM  INTERNET  

Page 54: OSDC.tw - Building a platform from open source

Thousands of web services that provide valuable data

Require developers to read documentation and form URLs/queries.

Data is isolated and can not be combined

Needs combining, tweaking, shaping even after it gets to the developer.

Before YQL

Page 55: OSDC.tw - Building a platform from open source

SQL-Like Language Synonymous with Data access

Familiar to developers

Expressive enough to get the right data

Self Describing - show, desc table

Allows you to query, lter and join data across Web Services.

Y! Open Stack – YQL

Page 56: OSDC.tw - Building a platform from open source

developer.yahoo.com/yql/console/

Page 57: OSDC.tw - Building a platform from open source

YQL – Open Tables

Twitter Google Facebook Friendfeed Wesabe Whitepages Zillow Search Weather

Flickr Upcoming Delicious Dopplr Github New York Times Shopping …any web service can be

as easy as SQL

Available on github - http://github.com/spullara/yql-tables/

Page 58: OSDC.tw - Building a platform from open source

YQL – Open Tables

Page 59: OSDC.tw - Building a platform from open source

YQL – Open Tables

Page 60: OSDC.tw - Building a platform from open source

YQL – Open Tables

Page 61: OSDC.tw - Building a platform from open source

select * from social.connections

select * from delicious.feeds.popular

select * from ickr.photos.interestingness

select * from friendfeed.status

select * from github.checkins

YQL - Examples

Page 62: OSDC.tw - Building a platform from open source

OAuth Endpoint

http://query.yahooapis.com/v1/yql?q=...

Public Endpoint

http://query.yahooapis.com/v1/public/yql?q=

YQL Console

http://developer.yahoo.com/yql/console

YQL – API End Points

Page 63: OSDC.tw - Building a platform from open source

Open Source Communities

Page 64: OSDC.tw - Building a platform from open source

http://www.symfony-project.org/jobeet/1_2/

Page 65: OSDC.tw - Building a platform from open source

Documentation

http://www.symfony-project.org/doc

Practical symfony - Jobeet

The Denitive Guide to symfony

The symfony Reference Guide

symfony Forms in Action

Doctrine ORM for PHP

Cookbooks + Cheat sheets + Wiki

API Documentation

Page 66: OSDC.tw - Building a platform from open source

Books worth reading

Page 67: OSDC.tw - Building a platform from open source

QUESTIONS? (I will be around, so please say hello and ask questions)

Page 68: OSDC.tw - Building a platform from open source

DEVELOPER.YAHOO.COM EXAMPLES | TUTORIALS | CODE SAMPLES

Page 69: OSDC.tw - Building a platform from open source

WANT TO JOIN YAHOO? WE ARE HIRING!

Page 70: OSDC.tw - Building a platform from open source