Fault-Tolerant and Transactional Stateful Serverless Workflows (Extended Version)

Total Page:16

File Type:pdf, Size:1020Kb

Fault-Tolerant and Transactional Stateful Serverless Workflows (Extended Version) Fault-tolerant and Transactional Stateful Serverless Workflows (extended version)? Haoran Zhang, Adney Cardozay, Peter Baile Chen, Sebastian Angel, and Vincent Liu University of Pennsylvania yRutgers University-Camden Abstract ing different functions to obtain nontrivial end-to-end applica- This paper introduces Beldi, a library and runtime system tions. This is fairly straightforward when functions are state- for writing and composing fault-tolerant and transactional less, but becomes involved when the functions maintain their stateful serverless functions. Beldi runs on existing providers own state (e.g., modify a data structure that persists across stateful serverless functions and lets developers write complex stateful applications that invocations). Composing such require fault tolerance and transactional semantics without the (SSFs) requires reasoning about consistency and isolation need to deal with tasks such as load balancing or maintaining semantics in the presence of concurrent requests and deal- virtual machines. Beldi’s contributions include extending the ing with component failures. While these requirements are log-based fault-tolerant approach in Olive (OSDI 2016) with common in distributed systems and are addressed by existing new data structures, transaction protocols, function invoca- proposals [8, 28, 33, 35, 46], SSFs have unique idiosyncrasies tions, and garbage collection. They also include adapting the that make existing approaches a poor fit. resulting framework to work over a federated environment The first peculiarity is that request routing is stateless. Ap- where each serverless function has sovereignty over its own proaches based on state machine replication are hard to im- data. We implement three applications on Beldi, including a plement because a follow-up message might be routed by the movie review service, a travel reservation system, and a social infrastructure to a different SSF instance from the one that media site. Our evaluation on 1,000 AWS Lambdas shows processed a prior message (e.g., an “accept” routed differently that Beldi’s approach is effective and affordable. than its “prepare”). A second characteristic is that SSFs can be independent and have sovereignty over their own data. For ex- 1 Introduction ample, different organizations may develop and deploy SSFs, and an application may stitch them together to achieve some Serverless computing is changing the way in which we end-to-end functionality. As a result, there is no component structure and deploy computations in Internet-scale systems. in the system that has full visibility (or access) to all the state. Enabled by platforms like AWS Lambda [2], Azure Func- Lastly, SSF workflows (directed graphs of SSFs) can be com- tions [3], and Google Cloud Functions [18], programmers plex and include cycles to express recursion and loops over can break their application into small functions that providers SSFs. If a developer wishes to define transactions over such then automatically distribute over their data centers. When a workflows (or its subgraphs), all transactions (including those user issues a request to a serverless-based system, this request that will abort) must observe consistent state to avoid infinite flows through the corresponding functions to achieve thede- loops and undefined behavior. This is a common requirement sired end-to-end semantics. For example, in an e-commerce in transactional memory systems [20, 23, 32, 37, 38], but is site, a user’s purchase might trigger a product order, a ship- seldom needed in distributed transaction protocols ping event, a credit card charge, and an inventory update, all To bring fault-tolerance and transactions to this challeng- of which could be handled by separate serverless functions. ing environment, this paper introduces Beldi, a library and During development, structuring an application as a set of runtime system for building workflows of SSFs. Beldi runs serverless functions brings forth the benefits of microservice on existing cloud providers without any modification to their arXiv:2010.06706v1 [cs.DC] 13 Oct 2020 architectures: it promotes modular design, quick iteration, infrastructure and without the need for servers. The SSFs and code reuse. During deployment, it frees programmers used in Beldi can come from either the app developer, other from the prosaic but difficult tasks associated with provision- developers in the same organization, third-party open-source ing, scaling, and maintaining the underlying computational, developers, or the cloud providers. Regardless, Beldi helps storage, and network resources of the system. In particular, to stitch together these components in a way that insulates app developers need not worry about setting up virtual ma- the developer from the details of concurrency control, fault chines or containers, starting or winding down instances to tolerance, and SSF composition. accommodate demand, or routing user requests to the right A well-known aspect of SSFs is that even though they set of functional units—all of this is automated once an app can persist state, this state is usually kept in low-latency developer describes the connectivity of the units. NoSQL databases (possibly different for each SSF) such as A key challenge in increasing the general applicability of DynamoDB, Bigtable, and Cosmos DB that are already fault serverless computing lies in correctly and efficiently compos- tolerant. Viewed in this light, SSFs are clients of scalable ?This is the full version of [45]. This version includes additional details fault-tolerant storage services rather than stateful services and evaluation results in the appendices. themselves. Beldi’s goal is therefore to guarantee exactly- 1 once semantics to workflows in the presence of clients (SSFs) of deploying complex serverless applications that incorporate that fail at any point in their execution and to offer synchro- state, and a list of requirements that Beldi aims to satisfy. nization primitives (in the form of locks and transactions) to prevent concurrent clients from unsafely handling state. 2.1 Serverless functions To realize this vision, Beldi extends Olive [36] and adapts Serverless computing aims to eliminate the need to manage its mechanisms to the SSF setting. Olive is a recent frame- machines, runtimes, and resources (i.e., everything except work that exposes an elegant abstraction based on logging and the app logic). It provides an abstraction where developers request re-execution to clients of cloud storage systems; oper- upload a simple function (or ‘lambda’) to the cloud provider ations that use Olive’s abstraction enjoy exactly-once seman- that is invoked on demand; an identifier is provided with tics. Beldi’s extensions include support for operations beyond which clients and other services can invoke the function. storage accesses such as synchronous and asynchronous invo- The cloud provider is then responsible for provisioning the cations (so that SSFs can invoke each other), a new data struc- VMs or containers, deploying the user code, and scaling the ture for unifying storage of application state and logs, and pro- allocated resources up and down based on current demand— tocols that operate efficiently on this data structure (§4). The all of this is transparent to users. In practice, this means that purpose of Beldi’s extensions is to smooth out the differences on every function invocation the provider will spawn a new between Olive’s original use case and ours. As one example, worker (VM or container) with the necessary runtime and Olive’s most critical optimization assumes that clients can dispatch the request to this worker (‘cold start’). The provider store a large number of log entries in a database’s atomicity may also use an existing worker, if one is free (‘warm start’). scope (the scope at which the database can atomically update Note that while workers can stay warm for a while, running objects). However, this assumption does not hold for many functions are limited by a timeout, after which they are killed. databases commonly used by SSFs. In DynamoDB, for ex- This time limit is configurable (up to 15 min in 1 s increments ample, the atomicity scope is a single row that can store at on AWS, up to 9 min in 1 ms increments on Google Cloud, most 400 KB of data [14]—the row would be full in less than and unbounded time in 1 s increments on Azure) and helps in a minute in our applications. budgeting and limiting the effect of bugs. Beldi also adapts existing concurrency control and dis- Serverless functions are often used individually, but they tributed commit protocols to support transactions over SSF can also be composed into workflows: directed graphs of func- workflows. A salient aspect of our setting is that there isnoen- tions that may contain cycles to express recursion or loops tity that can serve as a coordinator: a user issues its request to over one or more functions. Some ways to create workflows the first SSF in the workflow, and SSFs interact only withthe include AWS’s step functions [41] and driver functions.A SSFs in their outgoing edges in the workflow. Consequently, step function specifies how to stitch together different func- we design a protocol where SSFs work together (while re- tions (represented by their identifiers) and their inputs and specting the workflow’s underlying communication pattern) outputs; the step function takes care of all scheduling and to fulfill the duties of the coordinator and collectively decide data movement, and users get an identifier to invoke it. In whether to commit or abort a transaction (§6). contrast, a driver function is a single function specified by the To showcase the costs and the benefits of Beldi, we imple- developer that invokes other functions (similar to the main ment three applications as representative case studies: (1) a function of a traditional program). Control flow can form a travel reservation system, (2) a social media site, and (3) a graph because functions (including the driver function) can movie review service. These applications are based on Death- be multi-threaded or perform asynchronous invocations.
Recommended publications
  • Amazon Dynamodb
    Dynamo Amazon DynamoDB Nicolas Travers Inspiré de Advait Deo Vertigo N. Travers ESILV : Dynamo Amazon DynamoDB – What is it ? • Fully managed nosql database service on AWS • Data model in the form of tables • Data stored in the form of items (name – value attributes) • Automatic scaling ▫ Provisioned throughput ▫ Storage scaling ▫ Distributed architecture • Easy Administration • Monitoring of tables using CloudWatch • Integration with EMR (Elastic MapReduce) ▫ Analyze data and store in S3 Vertigo N. Travers ESILV : Dynamo Amazon DynamoDB – What is it ? key=value key=value key=value key=value Table Item (64KB max) Attributes • Primary key (mandatory for every table) ▫ Hash or Hash + Range • Data model in the form of tables • Data stored in the form of items (name – value attributes) • Secondary Indexes for improved performance ▫ Local secondary index ▫ Global secondary index • Scalar data type (number, string etc) or multi-valued data type (sets) Vertigo N. Travers ESILV : Dynamo DynamoDB Architecture • True distributed architecture • Data is spread across hundreds of servers called storage nodes • Hundreds of servers form a cluster in the form of a “ring” • Client application can connect using one of the two approaches ▫ Routing using a load balancer ▫ Client-library that reflects Dynamo’s partitioning scheme and can determine the storage host to connect • Advantage of load balancer – no need for dynamo specific code in client application • Advantage of client-library – saves 1 network hop to load balancer • Synchronous replication is not achievable for high availability and scalability requirement at amazon • DynamoDB is designed to be “always writable” storage solution • Allows multiple versions of data on multiple storage nodes • Conflict resolution happens while reads and NOT during writes ▫ Syntactic conflict resolution ▫ Symantec conflict resolution Vertigo N.
    [Show full text]
  • Performance at Scale with Amazon Elasticache
    Performance at Scale with Amazon ElastiCache July 2019 Notices Customers are responsible for making their own independent assessment of the information in this document. This document: (a) is for informational purposes only, (b) represents current AWS product offerings and practices, which are subject to change without notice, and (c) does not create any commitments or assurances from AWS and its affiliates, suppliers or licensors. AWS products or services are provided “as is” without warranties, representations, or conditions of any kind, whether express or implied. The responsibilities and liabilities of AWS to its customers are controlled by AWS agreements, and this document is not part of, nor does it modify, any agreement between AWS and its customers. © 2019 Amazon Web Services, Inc. or its affiliates. All rights reserved. Contents Introduction .......................................................................................................................... 1 ElastiCache Overview ......................................................................................................... 2 Alternatives to ElastiCache ................................................................................................. 2 Memcached vs. Redis ......................................................................................................... 3 ElastiCache for Memcached ............................................................................................... 5 Architecture with ElastiCache for Memcached ...............................................................
    [Show full text]
  • Amazon Documentdb Deep Dive
    DAT326 Amazon DocumentDB deep dive Joseph Idziorek Antra Grover Principal Product Manager Software Development Engineer Amazon Web Services Fulfillment By Amazon © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved. Agenda What is the purpose of a document database? What customer problems does Amazon DocumentDB (with MongoDB compatibility) solve and how? Customer use case and learnings: Fulfillment by Amazon What did we deliver for customers this year? What’s next? © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved. Purpose-built databases Relational Key value Document In-memory Graph Search Time series Ledger Why document databases? Denormalized data Normalized data model model { 'name': 'Bat City Gelato', 'price': '$', 'rating': 5.0, 'review_count': 46, 'categories': ['gelato', 'ice cream'], 'location': { 'address': '6301 W Parmer Ln', 'city': 'Austin', 'country': 'US', 'state': 'TX', 'zip_code': '78729'} } Why document databases? GET https://api.yelp.com/v3/businesses/{id} { 'name': 'Bat City Gelato', 'price': '$', 'rating': 5.0, 'review_count': 46, 'categories': ['gelato', 'ice cream'], 'location': { 'address': '6301 W Parmer Ln', 'city': 'Austin', 'country': 'US', 'state': 'TX', 'zip_code': '78729'} } Why document databases? response = yelp_api.search_query(term='ice cream', location='austin, tx', sort_by='rating', limit=5) Why document databases? for i in response['businesses']: col.insert_one(i) db.businesses.aggregate([ { $group: { _id: "$price", ratingAvg: { $avg: "$rating"}} } ]) db.businesses.find({
    [Show full text]
  • A Motion Is Requested to Authorize the Execution of a Contract for Amazon Business Procurement Services Through the U.S. Communities Government Purchasing Alliance
    MOT 2019-8118 Page 1 of 98 VILLAGE OF DOWNERS GROVE Report for the Village Council Meeting 3/19/2019 SUBJECT: SUBMITTED BY: Authorization of a contract for Amazon Business procurement Judy Buttny services Finance Director SYNOPSIS A motion is requested to authorize the execution of a contract for Amazon Business procurement services through the U.S. Communities Government Purchasing Alliance. STRATEGIC PLAN ALIGNMENT The goals for 2017-2019 includes Steward of Financial Sustainability, and Exceptional, Continual Innovation. FISCAL IMPACT There is no cost to utilize Amazon Business procurement services through the U.S. Communities Government Purchasing Alliance. RECOMMENDATION Approval on the March 19, 2019 Consent Agenda. BACKGROUND U.S. Communities Government Purchasing Alliance is the largest public sector cooperative purchasing organization in the nation. All contracts are awarded by a governmental entity utilizing industry best practices, processes and procedures. The Village of Downers Grove has been a member of the U.S. Communities Government Purchasing Alliance since 2008. Through cooperative purchasing, the Village is able to take advantage of economy of scale and reduce the cost of goods and services. U.S. Communities has partnered with Amazon Services to offer local government agencies the ability to utilize Amazon Business for procurement services at no cost to U.S. Communities members. Amazon Business offers business-only prices on millions of products in a competitive digital market place and a multi-level approval workflow. Staff can efficiently find quotes and purchase products for the best possible price, and the multi-level approval workflow ensures this service is compliant with the Village’s competitive process for purchases under $7,000.
    [Show full text]
  • Amazon Elasticache Deep Dive Powering Modern Applications with Low Latency and High Throughput
    Amazon ElastiCache Deep Dive Powering modern applications with low latency and high throughput Michael Labib Sr. Manager, Non-Relational Databases © 2020, Amazon Web Services, Inc. or its Affiliates. Agenda • Introduction to Amazon ElastiCache • Redis Topologies & Features • ElastiCache Use Cases • Monitoring, Sizing & Best Practices © 2020, Amazon Web Services, Inc. or its Affiliates. Introduction to Amazon ElastiCache © 2020, Amazon Web Services, Inc. or its Affiliates. Purpose-built databases © 2020, Amazon Web Services, Inc. or its Affiliates. Purpose-built databases © 2020, Amazon Web Services, Inc. or its Affiliates. Modern real-time applications require Performance, Scale & Availability Users 1M+ Data volume Terabytes—petabytes Locality Global Performance Microsecond latency Request rate Millions per second Access Mobile, IoT, devices Scale Up-out-in E-Commerce Media Social Online Shared economy Economics Pay-as-you-go streaming media gaming Developer access Open API © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon ElastiCache – Fully Managed Service Redis & Extreme Secure Easily scales to Memcached compatible performance and reliable massive workloads Fully compatible with In-memory data store Network isolation, encryption Scale writes and open source Redis and cache for microsecond at rest/transit, HIPAA, PCI, reads with sharding and Memcached response times FedRAMP, multi AZ, and and replicas automatic failover © 2020, Amazon Web Services, Inc. or its Affiliates. What is Redis? Initially released in 2009, Redis provides: • Complex data structures: Strings, Lists, Sets, Sorted Sets, Hash Maps, HyperLogLog, Geospatial, and Streams • High-availability through replication • Scalability through online sharding • Persistence via snapshot / restore • Multi-key atomic operations A high-speed, in-memory, non-Relational data store. • LUA scripting Customers love that Redis is easy to use.
    [Show full text]
  • Amazon Mechanical Turk Developer Guide API Version 2017-01-17 Amazon Mechanical Turk Developer Guide
    Amazon Mechanical Turk Developer Guide API Version 2017-01-17 Amazon Mechanical Turk Developer Guide Amazon Mechanical Turk: Developer Guide Copyright © Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Amazon. Amazon Mechanical Turk Developer Guide Table of Contents What is Amazon Mechanical Turk? ........................................................................................................ 1 Mechanical Turk marketplace ....................................................................................................... 1 Marketplace rules ............................................................................................................... 2 The sandbox marketplace .................................................................................................... 2 Tasks that work well on Mechanical Turk ...................................................................................... 3 Tasks can be completed within a web browser ....................................................................... 3 Work can be broken into distinct, bite-sized tasks .................................................................
    [Show full text]
  • Analytics Lens AWS Well-Architected Framework Analytics Lens AWS Well-Architected Framework
    Analytics Lens AWS Well-Architected Framework Analytics Lens AWS Well-Architected Framework Analytics Lens: AWS Well-Architected Framework Copyright © Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Amazon. Analytics Lens AWS Well-Architected Framework Table of Contents Abstract ............................................................................................................................................ 1 Abstract .................................................................................................................................... 1 Introduction ...................................................................................................................................... 2 Definitions ................................................................................................................................. 2 Data Ingestion Layer ........................................................................................................... 2 Data Access and Security Layer ............................................................................................ 3 Catalog and Search Layer ...................................................................................................
    [Show full text]
  • October 24, 2013—Amazon.Com, Inc
    AMAZON.COM ANNOUNCES THIRD QUARTER SALES UP 24% TO $17.09 BILLION SEATTLE—(BUSINESS WIRE)—October 24, 2013—Amazon.com, Inc. (NASDAQ: AMZN) today announced financial results for its third quarter ended September 30, 2013. Operating cash flow increased 48% to $4.98 billion for the trailing twelve months, compared with $3.37 billion for the trailing twelve months ended September 30, 2012. Free cash flow decreased 63% to $388 million for the trailing twelve months, compared with $1.06 billion for the trailing twelve months ended September 30, 2012. Free cash flow for the trailing twelve months ended September 30, 2013 includes fourth quarter 2012 cash outflows for purchases of corporate office space and property in Seattle, Washington, of $1.4 billion. Common shares outstanding plus shares underlying stock-based awards totaled 475 million on September 30, 2013, compared with 469 million one year ago. Net sales increased 24% to $17.09 billion in the third quarter, compared with $13.81 billion in third quarter 2012. Excluding the $332 million unfavorable impact from year-over-year changes in foreign exchange rates throughout the quarter, net sales grew 26% compared with third quarter 2012. Operating loss was $25 million in the third quarter, compared with an operating loss of $28 million in third quarter 2012. The unfavorable impact from year-over-year changes in foreign exchange rates throughout the quarter on operating loss was $7 million. Net loss was $41 million in the third quarter, or $0.09 per diluted share, compared with a net loss of $274 million, or $0.60 per diluted share, in third quarter 2012.
    [Show full text]
  • Leveraging Cloud-Based Predictive Analytics to Strengthen Audience Engagement
    TECHNICAL PAPER Leveraging Cloud-Based Predictive Analytics to Strengthen Audience Engagement By U. Shakeel and M. Limcaco Abstract appointed time for the airing of our favorite TV show. To grow their business and increase their audience, content People now expect to watch the programming they distributors must understand the viewing habits and interests want on their own schedule, which is driving more and of content consumers. This typically requires solving tough more media companies to consider providing their own computational problems, such as rapidly processing vast over-the-top service. These services use the internet amounts of raw data from Web sites, social media, devices, for delivery, which introduces potential quality issues catalogs, and back-channel sources. For- that are out of the control of the media tunately, today’s content distributors can owner or distributer. To mitigate these take advantage of the scalability, cost risks, many media distributors invest effectiveness, and pay-as-you-go model This raises the heavily in solutions that detect play- of the cloud to address these challenges. question of how to back issues; these solutions require In this paper, we show content distribu- build the next- large amounts of computational capac- ity to process massive, raw datasets to tors how to use cloud technologies to build generation media predictive analytic solutions. We exam- provide real-time course correction. In ine architectural patterns for optimiz- deliv ery platform this way, distributors can provide more ing media delivery, and we discuss how that not only delivers reliable content that caters to the view- to assess the overall consumer experience reli able content ing habits of their audience.
    [Show full text]
  • Enter the Purpose-Built Database Era: Finding the Right Database Type for the Right Job
    Enter the Purpose-Built Database Era: Finding the right database type for the right job 1 INTRODUCTION Stepping into the purpose-built era Data is a strategic asset for every organization. As data continues to exponentially grow, databases are becoming increasingly crucial to understanding data and converting it to valuable insights. IT leaders need to look for ways to get more value from their data. If you’re running legacy databases on-premises, you’re likely finding that provisioning, operating, scaling, and managing databases is tedious, time-consuming, and expensive. You need modernized database solutions that allow you to spend time innovating and building new applications—not managing infrastructure. Moving on-premises data to managed databases built for the cloud can help you reduce time and costs. Once your databases are in the cloud, you can innovate and build new applications faster—all while getting deeper and more valuable insights. Migrating to the cloud is the first step toward entering the era of purpose-built databases. But once in the cloud, how do you know which types of databases to use for which functions? Read on to learn more about purpose-built database types—and how you can ensure a smooth transition into an era of innovation, performance, and business success. 2 WHY CHANGE? Going beyond relational only Before we begin discussing purpose-built databases, let’s examine the status quo—using relational databases for just about every use case. Relational databases were designed for tabular data with consistent structure and fixed schema. They work for problems that are well defined at the onset.
    [Show full text]
  • How Can Startups Make Use of Cloud Services
    California State University, San Bernardino CSUSB ScholarWorks Electronic Theses, Projects, and Dissertations Office of aduateGr Studies 4-2021 How can startups make use of cloud services Gauri Nade Gauri Nade California State University - San Bernardino Follow this and additional works at: https://scholarworks.lib.csusb.edu/etd Part of the Educational Technology Commons Recommended Citation Nade, Gauri and Nade, Gauri, "How can startups make use of cloud services" (2021). Electronic Theses, Projects, and Dissertations. 1262. https://scholarworks.lib.csusb.edu/etd/1262 This Thesis is brought to you for free and open access by the Office of aduateGr Studies at CSUSB ScholarWorks. It has been accepted for inclusion in Electronic Theses, Projects, and Dissertations by an authorized administrator of CSUSB ScholarWorks. For more information, please contact [email protected]. HOW CAN START UPS MAKE USE OF CLOUD SERVICES A Project Presented to the Faculty of California State University, San Bernardino In Partial Fulfillment of the Requirements for the Degree Master of Science in Information Systems and Technology by Gauri Rajendra Nade May 2021 HOW CAN START UPS MAKE USE OF CLOUD SERVICES A Project Presented to the Faculty of California State University, San Bernardino by Gauri Rajendra Nade May 2021 Approved by: Benjamin Becerra, PhD, Committee Chair Conrad Shayo, PhD, Reader Jay Varzandeh, PhD, Dept. Chair, Information & Decision Sciences © 2021 Gauri Rajendra Nade ABSTRACT The purpose of this project is to discuss the technical obstacles that small and medium-sized enterprises (SMEs) face, as well as how cloud computing can help to solve these issues. Cloud computing has the ability to radically change competitive environments by offering a new forum for generating and delivering business value and market development.
    [Show full text]
  • Nosql for Dummies®
    NoSQL For Dummies® by Adam Fowler NoSQL For Dummies® Published by: John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030-5774, www.wiley.com Copyright © 2015 by John Wiley & Sons, Inc., Hoboken, New Jersey Media and software compilation copyright © 2015 by John Wiley & Sons, Inc. All rights reserved. Published simultaneously in Canada No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without the prior written permission of the Publisher. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201) 748-6008, or online at http://www.wiley.com/go/permissions. Trademarks: Wiley, For Dummies, the Dummies Man logo, Dummies.com, Making Everything Easier, and related trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and may not be used without written permission. All other trademarks are the property of their respective owners. John Wiley & Sons, Inc. is not associated with any product or vendor mentioned in this book. LIMIT OF LIABILITY/DISCLAIMER OF WARRANTY: THE PUBLISHER AND THE AUTHOR MAKE NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE ACCURACY OR COMPLETENESS OF THE CONTENTS OF THIS WORK AND SPECIFICALLY DISCLAIM ALL WARRANTIES, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE. NO WARRANTY MAY BE CREATED OR EXTENDED BY SALES OR PROMOTIONAL MATERIALS.
    [Show full text]