Google Cloud Platform Blog
Mobile voucher sales terminal in Africa powered by App Engine
Thursday, December 20, 2012
Today’s guest blogger is Dale Humby, CTO of
Nomanini
. Nomanini is a startup based in South Africa which provides a platform to sell prepaid products such as airtime, electricity and insurance electronically. In this post, Dale explains how the backend systems of their flagship device, Lula, run on App Engine.
Introduction
In rural markets, it is often difficult to distribute physical vouchers, which can be used to provide access to services such as electricity, insurance, and airtime for mobile phones. Nomanini enables entrepreneurs in Africa
to earn income selling prepaid vouchers in their local communities. We do this by distributing a portable, user-friendly voucher sales terminal, known as the Lula, which can be used on-the-go by people ranging from taxi drivers to street vendors.
The Lula, Nomanini's portable voucher sales terminal
Running Lula on App Engine
Nomanini uses Google App Engine to support the backend system for our network of point of sale terminals.
Terminals in the field connect to our App Engine application through the GSM mobile network. The terminals synchronize when a connection becomes available, allowing sales to be processed even when devices are offline.
The devices make an https post to a URL endpoint. Any data uploaded by the device is queued for processing as multiple tasks, and the App Engine application sends information back to the device within the returned body. Often the only responsibility a URL endpoint has is to create a task. If work can be broken into discrete areas we fan out to other tasks which run in parallel on separate App Engine instances. By controlling how many concurrent tasks are run in each queue, we are able to prioritize specific parts of our application ensuring the best quality of service for our customers.
By utilizing cross entity group transactions, transactional tasks and appropriate key naems for entities in the Datastore, we have been able to build an extremely resilient application capable of processing data.
Services we use
High Replication Datastore
,
NDB
and
Memcache
Extensive use of
push Task Queues
Blobstore
for storing file records
Logs API
,
Mail API
and
XMPP
for reporting and real-time notification of issues to our development team
URL Fetch API
to link to third-party API’s such as sending SMS’s and integration to mobile networks for airtime voucher purchase
Google Cloud Storage
and
Google BigQuery
for mining our data for interesting trends
ProdEagle
(another application built on top of Google App Engine) for real time metrics visualization
Benefits of building on App Engine
Saves time
App Engine’s High Replication Datastore gives us the peace of mind that our data will be available and accurate to a degree that we couldn’t easily replicate ourselves. As a start up, capital and time are in short supply. With App Engine, we can focus on building our unique application rather than worrying about infrastructure. App Engine Task Queues allow parallel data execution and retrying on failure, with little code overhead for developers.
Scalability
Nomanini has very cyclical traffic patterns: our peak traffic occurs in the early morning and late afternoon, with a monthly peak around payday in South Africa. Google App Engine automatically scales our application so that we don’t have to pay for excess server capacity during off-peak times, but have capacity available when we need it.
Ease of operation
Deployment is a breeze on App Engine. With just a few scripts tied in to our continuous integration server we can:
write the version number and app name into app.yaml
deploy automatically
run data migration scripts
change the default version once all indexes are serving
Monitoring is simplified by using built in dashboards. We can also export logs to Google Cloud Storage and run ad-hoc queries on analytics using Google BigQuery.
Conclusion
To reduce our time to market we used as many off-the-shelf components as possible, including Google App Engine.
We chose App Engine because it offers a platform with a consistent, well documented, ready-to-use set of services and allows our developers to test within an environment that is identical to our production environment - a practice that used to be prohibitively expensive.
Using the Google App Engine platform has saved our small development team time that we would have had to use to design, build and test a highly reliable backend to support our network of vending terminals in farflung places. Instead, we can focus our time on building a device that we hope will impact the way local commerce is done in rural economies.
To read more about the story of Nomanini, check out the post about us on the
Official Google Blog
.
-Contributed by Dale Humby, CTO, Nomanini
Posted by Zafir Khan, Product Marketing Manager, Google App Engine
App Engine 1.7.4 Released
Thursday, December 13, 2012
The Google App Engine team has been busy putting together our final release of 2012. This release includes a number of features graduating from Experimental status as well as the usual batch of bug fixes and improvements. We’ll be taking a short break from our monthly release cycle over the holidays, but we’ll be back to our normal schedule starting in February.
Expanded EU Support
We’re happy to announce that we are expanding European Union datacenter support, based on positive feedback from early users. You can sign up
here
. Please note, deployment is currently limited to
billing-enabled applications
.
We understand that data locality and latency are important to developers and are committed to further expanding this support in the coming months.
Java
We've made a new
Maven
plugin available, added the source to the SDK for easier IDE debugging, and made significant performance improvements to the JSP compilation process
.
Please see our Java
release notes
for more information.
Python
We’ve made a big push to bring a number of new features to GA, upgraded the interpreter to version 2.7.3, and added several new experimental features
.
For more details, please see our Python
release notes
.
New and Upgraded Features
We also have a handful of notable features in this release:
Task Queue statistics (General Availability):
You can see statistics such as the current number of tasks in a queue, the number of tasks executed in the last hour, and more.
Traffic splitting (General Availability):
You can split requests amongst different versions of your app.
LogsReader and Logs API (General Availability):
You can now fetch requests based on a list of request IDs.
Expanded Datastore query support (Experimental):
We’ve added ‘DISTINCT’ support to Datastore queries.
Full release notes and Google Cloud Platform newsletter
The complete list of features and a list of bug fixes for 1.7.4 can be found in our
release notes
. For App Engine coding questions and answers check us out on
Stack Overflow
, and for general discussion and feedback, find us on our
Google Group
.
Finally, to stay up to date with Google Cloud Platform,
sign up
for our newsletter where you’ll get the latest news, announcements and event information.
- Posted by the Google App Engine Team
Don't Miss Next '17
Use promo code NEXT1720 to save $300 off general admission
REGISTER NOW
Free Trial
GCP Blogs
Big Data & Machine Learning
Kubernetes
GCP Japan Blog
Labels
Announcements
56
Big Data & Machine Learning
91
Compute
156
Containers & Kubernetes
36
CRE
7
Customers
90
Developer Tools & Insights
80
Events
34
Infrastructure
24
Management Tools
39
Networking
18
Open Source
105
Partners
63
Pricing
24
Security & Identity
23
Solutions
16
Stackdriver
19
Storage & Databases
111
Weekly Roundups
16
Archive
2017
Feb
Jan
2016
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2015
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2014
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2013
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2012
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2011
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2010
Dec
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2009
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2008
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Feed
Subscribe by email
Technical questions? Check us out on
Stack Overflow
.
Subscribe to
our monthly newsletter
.
Google
on
Follow @googlecloud
Follow
Follow