当前位置:网站首页>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 .
边栏推荐
- Paddlepaddle paper reproduction course biggan learning experience
- QT opens the print dialog box in a text editor
- Yolov4 coco pre train Darknet weight file
- One question per day,
- Common classes in QT
- The difference between sizeof and strlen
- How to package rpm
- Is it safe to open a stock account online?
- Usage of qlist
- One question per day, a classic simulation question
猜你喜欢

Ubuntu 20.04 installing mysql8.0 and modifying the MySQL password

Afterword of Parl intensive learning 7-day punch in camp

1090.Phone List

QT set process startup and self startup

Source code analysis of synergetics and ntyco

Mining procedure processing

Sequential programming 1
![[C language] implementation of magic square array (the most complete)](/img/b2/2595263b77e0abac667972bbfe0c8a.jpg)
[C language] implementation of magic square array (the most complete)

Common dynamic memory errors
![[paper notes] semi supervised object detection (ssod)](/img/18/9fba70e6e4329722d9c6ad51d15724.jpg)
[paper notes] semi supervised object detection (ssod)
随机推荐
Time stamp calculation and audio-visual synchronization of TS stream combined video by ffmpeg protocol concat
Efficient pytorch: how to eliminate training bottlenecks
JMeter reading and writing excel requires jxl jar
AB string interchange
Pytorch distributed test pit summary
在打新债开户证券安全吗,需要什么准备
Why should the coroutine be set to non blocking IO
Learning notes on February 8, 2022 (C language)
Stack and queue
Go closure usage example
Solution of push code failure in idea
Data preprocessing - normalization and standardization
QT database connection deletion
Daily question, Caesar code,
The last glory of the late Ming Dynasty - the battle of Korea
Basic syntax and common commands of R language
Qcodeeditor - QT based code editor
Detailed summary of reasons why alertmanager fails to send alarm messages at specified intervals / irregularly
Several common optimization methods
2. operator and expression multiple choice questions