当前位置:网站首页>Architecture evolution of high-performance servers -- Suggestions
Architecture evolution of high-performance servers -- Suggestions
2022-06-25 15:24:00 【Running pig ZC】
Catalog
The way of architecture evolution
Write in the front
For back-end development , High concurrency is an old topic , Recently, the author encountered a very thorny problem , It's about high concurrency , At present, it is in support of 30W Terminals , But it will continue to grow in the later period , When I hear to support 500W When , I feel like I will have a bald head soon , But don't panic , There is always a way , I checked various materials and consulted several big men , Solved the problem step by step , Next, I will share how to build a high-performance , Highly concurrent servers .
The way of architecture evolution
1: The simplest --- Direct access tomcat Single application , Basically no problem
2: in consideration of tomcat Handle task Upper limit ( Plus tuning ) I still can't bear it , use nginx Load balancing , There should be no problem compared with this
3: Find this time DB The pressure will be greater , So I made a separation of reading and writing , No problem
4: Even if it is read-write separation , But now a large number of streams are generally queries ,DB There is still a bottleneck , You can consider DB colony ( at present mysql Has supported ), Skip here , Caching is considered in this article ( Now the projects are basically distributed , Then consider distributed caching ), So the architecture diagram becomes a dead end
5:4 It just basically solves the problem of reading , But what if it's written ? I'm not going straight to DB Write , Every time I write ? It doesn't exist well , Consider using caching , When the data is accumulated to a certain amount , Write the data once again DB, Or is it ES( After my test ,ES Write performance is really low , But reading is really powerful , Basically, it can be counted G Data in 100ms Back inside .), Use here JVM The cache of , You may need a global clock . Then the architecture diagram looks like this
6: Think it's over here ? As a person who is about to have a bald head , We must not stop here , So consider whether you can not let the request return results without passing through the background server ? So there was a great roar OpenResty(nginx Enhanced version of , The original author is Russian , The Chinese will strengthen and upgrade it , Add a series of plug-ins , And open source , at present JD Use this to cache product details ), Currently used in the project OpenResty Of Cache( operation nginx The cache of , Expiration time can be set , Cache size , Strategy and so on ),mysql( Can be operated directly mysql),redis( Can operate redis) modular , Cooperate with Lua Script together , The result is really fragrant , Then the architecture diagram evolves into the following ghost , It looks a little complicated anyway .
summary
There are many high concurrency problems in the project , Many solutions can be considered , For example, a single body cannot , I just distributed + colony , If not, consider caching , Caching can be divided into two types , Server cache and web Layer cache , Then you can optimize the code , Unnecessary synchronization can be changed to asynchronism , Use thread pool , The parameters of the thread pool can be tuned , Reference resources https://blog.csdn.net/weixin_45191798/article/details/100153524 , When writing for a large amount of data traffic , We can take into account the so-called tens of millions of KAFKA To cut the flow peak , Finally, it's really no good , With a bald head , Growing cabbages and raising pigs at home is also an option ( Pork is still more expensive , The way to get rich ), like JAVA And architecture students can discuss , AC duck .
边栏推荐
- System Verilog - function and task
- Go build reports an error missing go sum entry for module providing package ... to add:
- QT pop up open file dialog box QFileDialog
- If multiple signals point to the same slot function, you want to know which signal is triggered.
- Sampling method and descriptive statistical function in R language
- [C language] implementation of magic square array (the most complete)
- Afterword of Parl intensive learning 7-day punch in camp
- 网上办理股票开户安全吗?
- Shared memory synchronous encapsulation
- Basic knowledge of pointer
猜你喜欢
Stack and queue
QT set process startup and self startup
JMeter reading and writing excel requires jxl jar
SPARQL learning notes of query, an rrdf query language
Arithmetic operations and expressions
Esp8266 building smart home system
(2) Relational database
Advertising effect cluster analysis (kmeans)
Qcodeeditor - QT based code editor
QT loading third-party library basic operation
随机推荐
[paper notes] poly yolo: higher speed, more precise detection and instance segmentation for yolov3
Detailed description of crontab command format and summary of common writing methods
RDB and AOF persistence of redis
System Verilog - thread
JSON module dictionary and string conversion
System Verilog - data type
Go build reports an error missing go sum entry for module providing package ... to add:
Build a minimalist gb28181 gatekeeper and gateway server, establish AI reasoning and 3D service scenarios, and then open source code (I)
Common classes in QT
Dynamic memory allocation
Daily question, magic square simulation
QT excel table read / write library - qtxlsx
New title of PTA
Yolov4 coco pre train Darknet weight file
Real variable instance
SPARQL learning notes of query, an rrdf query language
Weka download and installation
Function of getinstance() method
Business layer - upper and lower computer communication protocol
Qlogsystem log system configuration use