Jingdong PAAs platform's main service object is two kinds of people, one kind is the individual developer, the second kind is the Jingdong isv. In the context of an increasingly sophisticated data-opening platform, they all want to deploy their applications and improve productivity at the lowest cost. The Beijing-East PAAs platform was developed to meet the needs of developers and ISVs.
The core of the Jingdong PAAs platform is Jae (Jingdong App Engine), which cloud Foundry as the kernel, cloud Foundry because Cloud is the first open source, the most mature in the community, The most active base PAAs platform. In order to provide more convenient services to developers, Jae the basic services, access to a variety of application Component Services, such as the high availability of MySQL services, Redis caching cluster services, and Message Queuing, in addition, it combines the application development tools to provide developers with a class of GitHub code hosting services, Cloud testing and Java Engineering Cloud compilation, as well as resource statistics, allow developers to focus more on their own code business. Furthermore, Jae monitors the applications hosted on the platform, supports viewing the application logs, and provides other security services. Let developers only care about their own application code, and everything else, are provided by Jae, greatly improve the efficiency of developers, reduce the cost of development. The following figure describes the relationship between Jae and PAAs platform users and other related services.
Jae also based on the requirements of the Beijing-East PAAs platform, has done a lot of targeted functional expansion. This article mainly discusses the core technical points of Jae, and Jae's other basic services will refer to its official website:
Intelligent routing (Load Balance)
We know that the Cloud foundry supports setting the number of instances of the application. But when the concurrency volume increases, can requests (request) be evenly distributed to the backend instances? Aiming at the application of multiple instances, Cloud foundry to respond to client's request randomly, and it is not fair and effective to use instance resources, and there is the possibility of avalanche at the peak of concurrent quantity. In order to solve this potential problem, Jae borrowed the Nginx routing strategy, using the weight (weight) algorithm, the smaller the load instance has the opportunity to respond to the request. So the question we need to solve further is how to compute the load on the instance and how to stream it after the request is received?
The following figure is the module diagram for Jae:
All requests first reach the router module, router the routing information for all instances (that is, the IP and port of the instance), and it determines which instance is to respond to the request. Each instance's IP and port information is the DEA module passes through the NATS message bus to the router, its realization principle is: The DEA sends all instance information on its own server to the Nats,router to subscribe this message, after receiving, saves in the route table, Periodically get the latest instance information through expiration failure mechanism.
To enable router to obtain the load information for each instance. We have modified the DEA module to send the instance load information to the Nats at the same time each time it sends a message. The DEA module collects the original information of the DEA server itself and all instances of CPU usage, memory usage, I/O and so on, and sends it to router. Router determines how the load value is calculated from these raw data.