An instant messaging system supporting cross-platforms.
XMPP (also known as Jabber) is the leading open standard for instant messaging (IM) and is an open XML technology for real-time communication. Since 2004, it's been an approved standard of the IETF (the same organization that standardized email and World Wide Web protocols). A rich set of extensions to the protocol are maintained by the Jabber Software Foundation, by which anyone may implement an XMPP service and interoperate with other organizations' implementations. Today, XMPP is used by leading companies, millions of users worldwide and is the best choice for open real-time collaboration. Although many server, client, and library implementations are distributed as free and open-source software, numerous freeware and commercial software implementations also exist.
eJabberd is the most famous open source Jabber server written in Erlang and is used by Whatsapp, some other tech giants such as Facebook and Google went away from it because it was difficult to find qualified developers.
Openfire is a real time collaboration (RTC) server licensed under the Open Source Apache License. It uses the only widely adopted open protocol for instant messaging, XMPP (also called Jabber). It is easy to setup and administer, but offers enterprise level security and performance.
However XMPP is a heavyweight protocol (streaming XML message) with high overhead in the network, which cause long latency when sending a message (long-polling technique) and also battery draining issue on mobile devices. Companies such as Facebook uses MQTT protocol at the client-side to improve connection performance and battery life. MQTT stands for MQ Telemetry Transport. It is a publish/subscribe, extremely simple and lightweight messaging protocol, designed for constrained devices and low-bandwidth, high-latency or unreliable networks. MQTT is being standardized by OASIS as a communication protocol for Internet of Things (IoT) and Machine-to-Macine (M2M) applications.
- The WhatsApp Architecture Facebook Bought For $19 Billion
- What is WhatsApp's server architecture?
- What is the technology behind wechat, whatsapp and other messenger apps?
- Erlang Programming Language - Build massively scalable soft real-time systems
- eJabberd - XMPP Messaging Server based on Erlang
- Openfire - XMPP Messaging Server based on Java
- What is MQTT?
- MQTT community wiki
- Eclipse Paho MQTT Client in Java
- Bulding Facebook Messenger with MQTT
- Why Facebook is using MQTT on mobile
- Full Stack - Facebook Engineering
- Scaling Out - Facebook Engineering
- Scaling Facebook to 500 Million Users and Beyond
- Scaling memcached at Facebook
- Building Software Systems - Google
- Software Engineering Advice from building Large-Scale Distributed Systems - Google
- Challenge in building Large-Scale Information Retrieval Systems - Google
- Building Large-Scale Internet Service - Google
- C10K Problem
- Introduction to Microsoft Azure Storage
- To BLOB or NOT to BLOB
- Network-attached Storage
- How is disk speed measured
- File System Comparison
- Linux File System explain
OS and Virtualization
Web and Application Server
- What are the pros and cons of Node.js versus Apache web server?
- What specifically makes Node.js more scalable than Apache?
- What is the difference between application server and web server?
- Tomcat Websphere Comparison - Choosing The Right Java Server Solution - See more at: https://www.mulesoft.com/tcat/tomcat-websphere#sthash.Sbi1SndB.dpuf
- PostgreSQL - High Availability, Load Balancing, and Replication
- MySQL Enterprise - High Availability
- MySQL Cluster - High Availability
- SQL Server 2016 - High Availability
- SQL Server 2014 - High Availability
- Security setup for RESTful web services - IBM
- WS Security - IBM
- OAuth 2.0 clients in Java programming - IBM
- Implementing OAuth 2.0 on IBM WebSphere DataPower - IBM
- Enabling OAuth2.0 Service Provide on IBM WebSphere Application Server
- Using OAuth 2.0 to access Google APIs
- Google OAuth 2.0 Playground
- The OAuth 2.0 Authorization Framework
Due to the fact that every Google service is blocked in China by the government firewall, to send and receive push notification for device in China region we must use other push service such as Baidu.
Architecture Considerations (Key Design Principle)
To avoid the risk of depending only to single vendor significantly, the architecture should be loosely coupled with the vendor's infrastructure. This consideration is not just from a cost standpoint, but also from an operations standpoint. This include a need to keep operating costs down by always using the most efficient software on the market, a need for fast expansion with limited funds, which could be made difficult if every new CPU represented thousands of dollars of licensing fees, or ease-of-development concerns.
For companies that are just starting out, and are unsure of how much complexity their architecture will require in the future, open source product is a safe bet because it allows them to get a very stable iteration of their infrastructure up and running for a very small initial investment. This leaves them plenty of breathing room to expand their network as needed, either by paying developers and architects to build a lightweight customized solution precisely matched to their needs, which can be expanded in response to the company's growth, or even just by saving them enough money that it's possible to migrate to a proprietary solution if their company reaches a stage where this is the most prudent decision. While for companies who are loaded with developers who like to use the latest and greatest in technology, an open source infrastructure can mean that there's enough money left over to try out other products, and because they are are so widely adopted, it's often very simple to integrate that work into the existing network if it proves successful. Avoiding the weight of massive annual license charges is important for these companies to maintain the sense that they are agile and will be able to respond to changes in the marketplace without making money the default deciding factor.
The cost of using free and open source product will only be as expensive as the hardware to run it and the developer hours to configure it, and apart from all these cost concerns, open source product comes out looking pretty good. Free, lightweight, and simple, yet powerful, efficient, and proven in both production and development environments contributes to a major factor in the decision making process.