| |
| |
Preface | |
| |
| |
| |
The Cloud for Developers | |
| |
| |
The Developer's Plight | |
| |
| |
What the Cloud Has Done for Innovation | |
| |
| |
The Cloud: A Brief History for Programmers | |
| |
| |
Introducing APIs | |
| |
| |
Along Comes DevOps | |
| |
| |
The Arrival of Application Lifecycle Management | |
| |
| |
The Next-Generation Cloud with Platform-as-a-Service | |
| |
| |
The Core of the Cloud | |
| |
| |
Managed Platforms versus Productized Platforms | |
| |
| |
The Cloud's Promise (or Hype) | |
| |
| |
The Cloud in Five Years | |
| |
| |
The Promise Fulfilled | |
| |
| |
| |
What Is PaaS? | |
| |
| |
Conjuring a Website | |
| |
| |
Early Options for Developers | |
| |
| |
Shared Web Hosting | |
| |
| |
Dedicated Hosting | |
| |
| |
PaaS: The Best of Both Worlds | |
| |
| |
The Developer's Holy Grail | |
| |
| |
Sharing the Load | |
| |
| |
Language Considerations | |
| |
| |
PaaS Pricing | |
| |
| |
Is PaaS Really New or Just IaaS++? | |
| |
| |
PaaS: A Vital Tool for Modern Apps | |
| |
| |
Moving Toward Higher-Level Languages | |
| |
| |
Managing the Backend | |
| |
| |
Conjuring Confidence | |
| |
| |
| |
Types of PaaS | |
| |
| |
Non-Portable: Following a Template | |
| |
| |
Force.com | |
| |
| |
Google App Engine | |
| |
| |
Windows Azure | |
| |
| |
Non-Portable Conclusion | |
| |
| |
Portable: No Heavy Lifting Required | |
| |
| |
Heroku | |
| |
| |
Cloud Foundry | |
| |
| |
AppFog | |
| |
| |
dotCloud | |
| |
| |
CloudBees | |
| |
| |
Summary: Where Do You Want to Live? | |
| |
| |
Dealing with Legacy and Greenfield Apps | |
| |
| |
Tapping Into Services | |
| |
| |
Moving Toward Open Standards | |
| |
| |
The Allure of Open Source | |
| |
| |
Evaluating Your Legacy | |
| |
| |
| |
Moving Legacy Apps to PaaS | |
| |
| |
Initial Considerations | |
| |
| |
Sidestepping Potential Problems | |
| |
| |
Common Questions to Ask Yourself | |
| |
| |
Even More Legacy Code Issues | |
| |
| |
Overview | |
| |
| |
Asset Hosting | |
| |
| |
All About Blob | |
| |
| |
PHP with Amazon S3 | |
| |
| |
Node.js with Azure Blob Service | |
| |
| |
Generalized Asset Hosting Functions in Ruby for Rackspace Cloud Files | |
| |
| |
Uploading with Plug-ins | |
| |
| |
Session Management | |
| |
| |
PHP | |
| |
| |
Node.js | |
| |
| |
Ruby | |
| |
| |
Java | |
| |
| |
Caching | |
| |
| |
Filling In the Pieces | |
| |
| |
Caching with memcached in PHP | |
| |
| |
Caching with MongoDB in Node.js | |
| |
| |
Generalized Caching Functions in Ruby for Redis | |
| |
| |
Asynchronous Processing | |
| |
| |
Serving Up Stored Data | |
| |
| |
How to Create Asynchronous Processes | |
| |
| |
More Advanced Scheduling of Background Tasks | |
| |
| |
SQL | |
| |
| |
The Dilemma of Stored Procedures | |
| |
| |
NoSQL | |
| |
| |
Miscellaneous Gotchas | |
| |
| |
The Optimization Trap | |
| |
| |
Starting from Scratch | |
| |
| |
A Final Note on Legacy Apps | |
| |
| |
| |
Writing New Apps for PaaS | |
| |
| |
Breaking Down the Monolith | |
| |
| |
Independent Thinking | |
| |
| |
Leveraging APIs for Mobile Development | |
| |
| |
The Emergence of JSON and REST | |
| |
| |
A Look at JSON | |
| |
| |
A Look at REST | |
| |
| |
A Look at Metaservices | |
| |
| |
Consuming RESTful Metaservices | |
| |
| |
Application Clients | |
| |
| |
Mobile Clients | |
| |
| |
Thin Web Clients | |
| |
| |
Thick Web Clients | |
| |
| |
The Unique Contribution of PaaS | |
| |
| |
Four Important Benefits | |
| |
| |
A Solution for Enterprises and Governments | |
| |
| |
The Effect of Moore's Law | |
| |
| |
| |
Mobile Apps on PaaS | |
| |
| |
A Brief History of Mobile App Development | |
| |
| |
The Apps of the Future | |
| |
| |
Data Structures | |
| |
| |
JSON and XML | |
| |
| |
Consuming Metaservices in Mobile Clients | |
| |
| |
iOS | |
| |
| |
Android | |
| |
| |
How PaaS Makes Mobile Backend Development Easier | |
| |
| |
It's Fast to Build Mobile Backend Metaservices | |
| |
| |
It's Easy to Scale Metaservices with PaaS | |
| |
| |
It's Easy to Pick the Right Underlying Core Services | |
| |
| |
Portable Interfaces Can Be Used on Many Devices | |
| |
| |
Serving a Large Audience | |
| |
| |
| |
A Look at Core Services | |
| |
| |
Non-PaaS Core Services | |
| |
| |
Evaluating PaaS for Services | |
| |
| |
Saving Time with Managed Databases and PaaS | |
| |
| |
SQL | |
| |
| |
NoSQL | |
| |
| |
Caches and PaaS: Look for Redundancy | |
| |
| |
Solving the Challenges of Email | |
| |
| |
The Importance of Monitoring | |
| |
| |
Considering Your Options | |
| |
| |
Taking the Long View | |
| |
| |
Load Testing | |
| |
| |
Planning an Upgrade Path | |
| |
| |
Storage Options | |
| |
| |
| |
Why Not PaaS? | |
| |
| |
Public Cloud versus Private Cloud | |
| |
| |
What Is Private Cloud? | |
| |
| |
How to Choose: Small- and Medium-Sized Businesses | |
| |
| |
Open and Closed | |
| |
| |
How to Choose: Enterprise Businesses | |
| |
| |
The Limitations of PaaS | |
| |
| |
Fitting Your App into the Mold | |
| |
| |
More Considerations | |
| |
| |
Avoiding Limitations | |
| |
| |
Encountering Resistance | |
| |
| |
Putting the Limitations in Perspective | |
| |
| |
| |
The Future of PaaS | |
| |
| |
The Influence of OpenStack | |
| |
| |
Keeping Your Development Options Open | |
| |
| |
Outages: Your Biggest Problem | |
| |
| |
Regaining Control Through Open Source | |
| |
| |
Micro Magic | |
| |
| |
Limitations of Open Source PaaS Libraries | |
| |
| |
The Virtues of Versatility | |
| |
| |
Final Thoughts | |
| |
| |
| |
Resources | |
| |
| |
PaaS Providers | |
| |
| |
IaaS Providers | |
| |
| |
Managed Services | |
| |
| |
Data storage: MySQL | |
| |
| |
Data storage: PostgreSQL | |
| |
| |
Data storage: CouchDB | |
| |
| |
Data storage: MongoDB | |
| |
| |
Data storage: NoSQL | |
| |
| |
Data storage: Redis | |
| |
| |
Data storage: Caching | |
| |
| |
Mobile | |
| |
| |
Search | |
| |
| |
Logging | |
| |
| |
Email | |
| |
| |
Background Tasks | |
| |
| |
Analytics | |
| |
| |
Error Monitoring | |
| |
| |
Utilities | |
| |
| |
Payments | |
| |
| |
Migrating Legacy Apps to PaaS | |
| |
| |
WordPress Plug-ins | |
| |
| |
Drupal Modules | |
| |
| |
Joomla! Plug-ins | |
| |
| |
Greenfield PaaS App Development | |
| |
| |
Ruby | |
| |
| |
Python | |
| |
| |
Node.js | |
| |
| |
PHP | |
| |
| |
Java | |
| |
| |
.NET | |
| |
| |
Perl | |
| |
| |
Index | |