А давайте будем многопоточить и масштабировить! -...
TRANSCRIPT
MULTITHREADING AND SCALING: Diary of a Madman #0000
TSIMAFEI AVILIN
FEBRUARY 26, 2017Maslenitsa Co.
FEBRUARY 26, 2017
API TESTING+ PRE-LOAD TESTING + AZURE
MULTITHREADING AND SCALING: Diary of a Madman #0000
3CONFIDENTIAL
AGENDA
What we want to share:• PROBLEM STATEMENT• MULTI THREADING AS A PRE-LOAD TESTING• SCALING IN AZURE
4CONFIDENTIAL
PROBLEM STATEMENT
Maslenitsa is being celebrated today and you have to bake 1000 pancakes in a short time, how you gonna do that?
5CONFIDENTIAL
STEP BY STEP SOLUTIONS
bake 1000 pancakes for one cook – tooooo long!
bake 1000 pancakes for a group of cooks – much better!
+ Good approach!
6CONFIDENTIAL
PROBLEM STATEMENT
Imagine that you need to perform comparison of many thousands of items in most cases of the same type (files, DB data, strings, etc. )
7CONFIDENTIAL
OUR ARCHITECTURE \ TASK
Need to compare thousands of .xml files in a short time…Responses are coming from REST and SOAP services
Files
to b
e co
mpa
red
in S
OAP
and
REST
serv
ices
8CONFIDENTIAL
ONE THREAD, LAPTOP, 1000 files
Example of a simple method to compare API responses from REST and SOAP services
var comparisionResult = Comparison.Run(validatedUBFContext.FromSOAP, validatedUBFContext.FromREST);
Laptop processor:• Processor: Intel® Core™ i5-6300U• # Cores: 2• # Threads : 4Time to process 1000 files (each file is about 50-100Kb size of): • 31.30min
9CONFIDENTIAL
MUTLITHREADING, SAME LAPTOP, 1000 files
MaxDegreeOfParallelism – number of threadsvar opt = new ParallelOptions { MaxDegreeOfParallelism = int.Parse(ConfigurationManager.AppSettings["DegreeOfParallelization"]) };
Parallel.ForEach(validatedUBFProvider.GetUBFs(ubfStoragePath, opt, validatedUBFContext => {try {var comparisionResult = Comparison.Run(validatedUBFContext.SOAP, validatedUBFContext.REST); } }
DegreeTime, min
1 31.344 10.055 8.497 8.198 7.249 6.53
10 6.4430 650 6.2270 6.56
100 6.35150 6.14200 7
0 20 40 60 80 100 12005
101520253035
Time/Degree
Time to process 1000 files is about 6.30 min instead of 31.30min
10CONFIDENTIAL
MULTITHREADING AS PRE-LOAD TESTING
Even performing this simple testing based on multithreading and sending API requests (.xml files ~ 60.000 files per day ) to both REST and SOAP services, brought out some issues:
• DB issues (DB architecture, indexing, procedures, etc.)• API issues (500 internal server error as internal api issues, scaling, etc.)• APP CONFIGURATION issues (no specific configuration file, code regression
issues, needs of additional system specific activities like restart IIS which is an issue, etc.)
• Indicating of a maximum request size as a system confines• Caching issues• etc.
11CONFIDENTIAL
FEBRUARY 26, 2017
GO FORWARD AND USE AZURE PRICES PLANS
12CONFIDENTIAL
SCALING IN AZURE : DB (DTU)Database Throughput Unit (DTU): DTUs provide a way to describe the relative capacity of a performance level. DTUs are based on a blended measure of CPU, memory, reads, and writes. As DTUs increase, the power offered by the performance level increases.
13CONFIDENTIAL
SCALING IN AZURE : APP SERVICE
14CONFIDENTIAL
MUTLITHREADING, SAME LAPTOP, 1000 files, scaling in Azure
Because of files to be validated\verifying are processed on VM in Azure (DB + SOAP) on the one hand and REST service on another one, we can try to play with pricing plans to make better performance of DB and a instance where service is running.
DTU S2 S0 S0 S0 S1 S3 P1 P2 P2
APP SERVICE S2 S2 S1 S3 S2 S2 S2 S2 P3
Number of threads:10/ min 6.14 6.59 6.49 7.08 6.56 7.01 7.06 6.5 6.57
As it can be seen from the table above, it does not make sense to pay much money for the more expensive prices plans.It’s obvious, because laptop cannot send more requests then the processor allows based on proposed architecture and ‘infrastructure’.
15CONFIDENTIAL
MUTLITHREADING, SERVER, 1000 files, scaling in Azure
Server processor:• Processor: Intel(R) Xeon(R) CPU E5-2670 0 2.60GHz • # Cores: 8• # Threads : 16Time to process 1000 files (each file is about 50-100Kb size of) with 100 threads: • 4.30min
Threads DTUAPP SERVICEstart end dif
100P2 S3 2:49:54 2:54:36 0:04:42100P1 S3 3:06:25 3:10:49 0:04:24100S3 S3 3:24:00 3:28:37 0:04:37100S0 S3 3:58:50 4:04:34 0:05:44100P2 S1 5:07:30 5:12:27 0:04:57
Scaling in Azure:
S0\S3 vs S3\S3- the difference is only ~1 min, but in case of 20K files it would be about 20min
16CONFIDENTIAL
FEBRUARY 26, 2017
THANKS! ДЗЯКУЮ! СПАСИБО!