E ese le manaia pe a oʻo mai mea laiti uma e manaʻomia: o se peni lelei ma se api, penitala faʻamaʻai, se isumu lelei, nai uaea faaopoopo, ma isi. O nei mea e le faʻaalia e le tosina atu i ai, ae faʻaopoopoina le mafanafana i le olaga. O le tala lava e tasi o loʻo i ai i telefoni feaveaʻi ma komepiuta: mo faʻamalama umi, mo le faʻaititia o le tele o se ata, mo le faʻatusatusaina o tupe a le tagata lava ia, lomifefiloi, faaliliu, tagata liliu, ma isi. E iai sau tasi? - lea e taugofie, i taimi uma e maua ai le tele o mea aoga? Leai, e le o le tasi o loʻo ia te oe i lau kamupani, ae o lau lava, "taga" tasi. Na matou manatu e aunoa ma se VPS laʻititi i le 2019 sa faʻanoanoa, e pei lava o le leai o se vaipuna masani i se lauga. Aisea e faanoanoa ai? O le taumafanafana. O a mai le taumafanafana? Tau mafanafana mo se tagata tomai faapitoa IT: nofo i le fale, galue i au galuega e sili ona e fiafia i ai e aunoa ma se faanoanoa. I se tulaga lautele, sa matou mafaufau ma faia.
Ua taunu'u mai faiga faa-Komunisi, uo.
E faapena o ia - matou VPS mo le tolusefulu
Ua matou faitau i le tele o tala mai tagata tauva ma tagata faʻaoga na tusia 3-4 tausaga talu ai pe aisea e le manaʻomia ai se VPS taugofie. Ia, e saʻo, o le VPS "mo se pene" o se maketi mama ma e le mafai ona ofoina atu avanoa faigaluega masani. Ae o taimi ua suia, o le tau o punaoa faʻapitoa ua faʻaitiitia ma maualalo, ma mo 30 rubles i le masina ua matou sauni e ofoina atu lenei mea:
- Galue: Intel Xeon 2 GHz (1 autu)
- faiga Linux (Debian, Ubuntu, CentOS (filifiliga)
- 1 tuatusi IPv4 tuuto
- 10 GB o faʻamaumauga faʻamaumauga i luga o taʻavale SSD-vasega televave
- RAM: 512 MB
- Ta'i lua pili
- feoaiga e le gata
O le tau e fa'atatau i fa'agata fa'atekinisi fa'aopoopo, fa'amatalaga i luga la matou ofo manaia - VPS mo 30 rubles.
O ai e talafeagai mo lenei server virtual? Ioe i le toetoe lava o tagata uma: amata, fiafia, atinaʻe poto masani, faʻafiafia DIY ma e oʻo lava i nisi kamupani.
O le a le mea e fetaui mo lenei VPS?
Matou te manatu o le a maua e le au faitau a Habr a latou lava auala e faʻaaoga ai lenei faʻatulagaga, ae na matou filifili e aoina a matou lava filifiliga o manatu - faʻapefea pe a manaʻomia e se tasi, ae le iloa e alii?
- Tuu lau 'upega tafaʻilagi faigofie, faila, toe amata i le code, ma isi. Ioe, o lau lava 'upega tafaʻilagi faʻatulagaina e faia ai se lagona lelei i le tagata faigaluega. Tuu i luga o lau VPS ma ia nafa ma le saogalemu ma le mautu o le saite oe lava, ae le o le aufaigaluega a le au talimalo masani.
- Fa'aoga VPS mo fa'amoemoega fa'aa'oa'oga: fa'afeiloa'i lau poloketi, su'esu'e foliga o le 'au'aunaga ma le 'au'aunaga fa'agaioiga, fa'ata'ita'i ma DNS, tinker ma se tama'i nofoaga fa'aaoaoga.
- Mo telefoni. O nisi taimi o se tagata fai pisinisi, freelancer poʻo se kamupani laʻititi e manaʻomia tele le IP telefoni, ma o le au faʻatautaia o lenei telefoni e matuaʻi matapeʻapeʻa. E faigofie: matou te ave la matou 'auʻaunaga, faʻatau se numera mai se IP telefoni feaveaʻi, faʻatutu se virtual PBX ma fatuina numera i totonu (pe a manaʻomia). E tele naua tupe teu.
- Fa'aoga le 'au'aunaga e su'e ai au talosaga.
- Fa'aoga le 'au'aunaga mo fa'ata'ita'iga DIY, e aofia ai le fa'atonutonuina ma le aoina mai o fa'amaumauga mai masini atamai fale.
- O se auala e le masani ai e faʻaaogaina o le tuʻuina lea o se fesoasoani fefaʻatauaʻiga fefaʻatauaʻiga, se robot fefaʻatauaʻiga, i luga o le server. O le a nafa atoatoa oe mo le mautu ma le saogalemu o le 'au'aunaga, o lona uiga o le ae mauaina se meafaigaluega fa'atonutonu mo fefa'ataua'iga i maketi fa'atau. Ia, pe a iai se tasi e fiafia pe fuafua :)
O loʻo i ai talosaga mo ia VPS i totonu o le kamupani. I le faaopoopo atu i le auaunaga telefoni ua uma ona taʻua, e mafai ona e faʻatinoina le tele o mea manaia. Faataitaiga:
- Tu'u ni fa'amaumauga laiti ma fa'amatalaga e mafai ona maua e tagata faigaluega femalagaa'i i se mamao, mo se fa'ata'ita'iga, fa'aaoga ftp. O lenei mea o le a faʻatagaina oe e faʻafesoʻotaʻi vave auʻiliʻiliga fou, faʻafouina fetuutuunaiga mo tagata faʻatau, faʻaaliga, ma isi.
- Tuuina atu avanoa le tumau i tagata faʻaoga poʻo tagata faʻatau e faʻaalia polokalame poʻo ala faʻasalalau.
VPS su'ega su'ega mo 30 rubles - faia mo oe
30 rubles e matua itiiti lava e te le manaʻo e ave se kata e totogi ma suʻe. O nisi taimi matou te paie foi, ae o le taimi lenei na matou faia mea uma mo oe. Aʻo leʻi tuʻuina atu 'auʻaunaga i le taua, na matou faia se suʻega e siaki uma faʻamatalaga ma faʻaalia mea e mafai e 'auʻaunaga i lenei tau. Ina ia sili atu le manaia, matou te faʻaopopoina le ogaoga ma siaki pe faʻafefea ona amio lenei faʻatulagaga pe a sili atu le mamafa ma le uta nai lo tau matou te setiina.
O le tagata talimalo sa i lalo o le uta o le tele o masini masini na faia galuega eseese i luga o le processor ma faʻaaogaina ma le faʻaaogaina le subsystem disk. O le fa'amoemoe o le fa'ata'ita'iina lea o le tu'uga maualuga ma se uta fa'atusa pe sili atu nai lo le taua.
I le faāaopoopoga i le avega faifai pea, na matou faāapipiāiina ni masini faāapitoa se tolu e aoina ni fua faāatatau faāapitoa e faāaaoga ai le sysbench, o taunuāuga averesi o loāo tuāuina atu i lalo, ma masini faāapitoa e 50 na faāatupuina ai ni avega faāaopoopo. O masini faāapitoa uma na faāataāitaāiina sa tutusa le faāatulagaga (single core, 512 GB RAM, 10 GB SSD), ma sa filifilia se ata masani e fai ma faiga faāaoga. debian 9.6, lea e ofoina atu i tagata faŹ»aoga i luga o le RUVDS.
O le uta na faʻataʻitaʻiina i le natura ma le tele e faʻatusatusa i le taua:
- O nisi masini komepiuta na faʻalauiloaina ma maualalo le uta
- O nisi masini na faʻatautaia se faʻataʻitaʻiga faʻataʻitaʻiga o le uta i luga o le gaosiga (faʻaaogaina le aoga )
- I le vaega o totoe o masini komepiuta, matou te faʻatautaia se tusitusiga e faʻaaoga ai le dd e kopi ai faʻamaumauga mai faʻamaumauga na saunia muamua i le tisiki ma se tapulaa seti e faʻaaoga ai le pv (faʻataʻitaʻiga e mafai ona vaʻaia. и ).
E le gata i lea, e pei ona e manatua, e tolu a matou masini na aoina mai fua faʻatatau.
I luga o masini taʻitasi, o se tusitusiga na faʻatinoina faʻataʻamilomilo uma i le 15 minute, lea e faʻataʻitaʻiina ai faʻataʻitaʻiga masani sysbench mo le gaosiga, manatua ma le tisiki.
Fa'amatalaga sysbench.sh
#!/bin/bash
date +"%Y-%m-%d %H:%M:%S" >> /root/sysbench/results.txt
sysbench --test=cpu run >> /root/sysbench/results.txt
sysbench --test=memory run >> /root/sysbench/results.txt
sysbench --test=fileio --file-test-mode=seqwr run >> /root/sysbench/results.txt
sysbench --test=fileio --file-test-mode=seqrd run >> /root/sysbench/results.txt
sysbench --test=fileio --file-test-mode=rndrw run >> /root/sysbench/results.txtO taunuʻuga o loʻo tuʻuina atu mo le faʻaogaina i le sysbench format, ae o le averesi o tau mo le taimi atoa o suʻega na ave mai masini uma, o le taunuuga e mafai ona vaʻaia iinei:
Sysbanch-avg.txtsysbench 0.4.12: multi-threaded system evaluation benchmark
Tamoe i le suʻega ma filifiliga nei:
Aofai o filo: 1
Faia o CPU tulaga faʻatulagaina
Na amata faʻasologa!
Faia.
Tapulaʻa maualuga numera numera siaki i suʻega CPU: 10000
Aotelega o le faʻataunuʻuina o le suʻega:
taimi atoa: 19.2244s
aofa'i o mea na tutupu: 10000
aofaʻi taimi faʻaalu e le faʻatinoina o mea: 19.2104
fuainumera taʻitasi e talosagaina:
min: 1.43ms
fua: 1.92ms
maualuga: 47.00ms
tusa. 95 pasene: 3.02ms
Faʻasologa lelei:
mea tutupu (avg/stddev): 10000.0000/0.00
taimi fa'atino (avg/stddev): 19.2104/0.00
sysbench 0.4.12: faʻailoga suʻesuʻega faʻasologa o faʻasologa
Tamoe i le suʻega ma filifiliga nei:
Aofai o filo: 1
Faia o fa'agaioiga manatua su'ega saoasaoa
Tele poloka manatua: 1K
Tele fa'aliliuga manatua: 102400M
Ituaiga gaoioiga manatua: tusi
Ituaiga lautele lautele: lalolagi
Na amata faʻasologa!
Faia.
Fa'atinoga fa'atino: 104857600 (328001.79 ops/sec)
102400.00 MB fa'aliliuina (320.32 MB/sec)
Aotelega o le faʻataunuʻuina o le suʻega:
taimi atoa: 320.9155s
aofa'i o mea na tutupu: 104857600
aofaʻi taimi faʻaalu e le faʻatinoina o mea: 244.8399
fuainumera taʻitasi e talosagaina:
min: 0.00ms
fua: 0.00ms
maualuga: 139.41ms
tusa. 95 pasene: 0.00ms
Faʻasologa lelei:
mea tutupu (avg/stddev): 104857600.0000/0.00
taimi fa'atino (avg/stddev): 244.8399/0.00
sysbench 0.4.12: faʻailoga suʻesuʻega faʻasologa o faʻasologa
Tamoe i le suʻega ma filifiliga nei:
Aofai o filo: 1
Fa'aopoopo faila fu'a tatala: 0
128 faila, 16Mb taʻitasi
2Gb le tele o faila
Tele poloka 16Kb
FSYNC fa'avaitaimi e mafai, vala'au fsync() ta'i 100 talosaga.
Vala'au fsync() i le faaiuga o le su'ega, Enabled.
Fa'aaogÄ fa'atasi I/O faiga
Faia le su'ega tusitusi fa'asolosolo (foafoaga).
Na amata faʻasologa!
Faia.
Galuega fa'atino: 0 Faitau, 131072 Tusi, 128 Isi = 131200 Aofa'i
Faitau 0b Tusia 2Gb Aofa'iga fa'aliliuina 2Gb (320.1Mb/sec)
20251.32 Talosaga/sec fa'atino
Aotelega o le faʻataunuʻuina o le suʻega:
taimi atoa: 6.9972s
aofa'i o mea na tutupu: 131072
aofaʻi taimi faʻaalu e le faʻatinoina o mea: 5.2246
fuainumera taʻitasi e talosagaina:
min: 0.01ms
fua: 0.04ms
maualuga: 96.76ms
tusa. 95 pasene: 0.03ms
Faʻasologa lelei:
mea tutupu (avg/stddev): 131072.0000/0.00
taimi fa'atino (avg/stddev): 5.2246/0.00
sysbench 0.4.12: faʻailoga suʻesuʻega faʻasologa o faʻasologa
Tamoe i le suʻega ma filifiliga nei:
Aofai o filo: 1
Fa'aopoopo faila fu'a tatala: 0
128 faila, 16Mb taʻitasi
2Gb le tele o faila
Tele poloka 16Kb
FSYNC fa'avaitaimi e mafai, vala'au fsync() ta'i 100 talosaga.
Vala'au fsync() i le faaiuga o le su'ega, Enabled.
Fa'aaogÄ fa'atasi I/O faiga
Faia le su'ega faitau fa'asologa
Na amata faʻasologa!
Faia.
Galuega fa'atino: 131072 Faitau, 0 Tusi, 0 Isi = 131072 Aofa'i
Faitau 2Gb Tusia 0b Aofa'i fa'aliliuina 2Gb (91.32Mb/sec)
5844.8 Talosaga/sec fa'atino
Aotelega o le faʻataunuʻuina o le suʻega:
taimi atoa: 23.1054s
aofa'i o mea na tutupu: 131072
aofaʻi taimi faʻaalu e le faʻatinoina o mea: 22.9933
fuainumera taʻitasi e talosagaina:
min: 0.00ms
fua: 0.18ms
maualuga: 295.75ms
tusa. 95 pasene: 0.77ms
Faʻasologa lelei:
mea tutupu (avg/stddev): 131072.0000/0.00
taimi fa'atino (avg/stddev): 22.9933/0.00
sysbench 0.4.12: faʻailoga suʻesuʻega faʻasologa o faʻasologa
Tamoe i le suʻega ma filifiliga nei:
Aofai o filo: 1
Fa'aopoopo faila fu'a tatala: 0
128 faila, 16Mb taʻitasi
2Gb le tele o faila
Tele poloka 16Kb
Numera o talosaga fa'afuase'i mo IO fa'afuase'i: 10000
Faitau/Tusi fua mo su'ega IO tu'ufa'atasi: 1.50
FSYNC fa'avaitaimi e mafai, vala'au fsync() ta'i 100 talosaga.
Vala'au fsync() i le faaiuga o le su'ega, Enabled.
Fa'aaogÄ fa'atasi I/O faiga
Faia le su'ega r/w fa'afuase'i
Na amata faʻasologa!
Faia.
Galuega fa'atino: 6000 Faitau, 4000 Tusi, 12800 Isi = 22800 Aofa'i
Faitau 93.75Mb Tusia 62.5Mb Aofa'i fesiitai 156.25Mb (1341.5Kb/sec)
85.61 Talosaga/sec fa'atino
Aotelega o le faʻataunuʻuina o le suʻega:
taimi atoa: 152.9786s
aofa'i o mea na tutupu: 10000
aofaʻi taimi faʻaalu e le faʻatinoina o mea: 14.1879
fuainumera taʻitasi e talosagaina:
min: 0.01ms
fua: 1.41ms
maualuga: 210.22ms
tusa. 95 pasene: 4.95ms
Faʻasologa lelei:
mea tutupu (avg/stddev): 10000.0000/0.00
taimi fa'atino (avg/stddev): 14.1879/0.00
O faʻaiʻuga e faʻaalia, ae e le tatau lava ona avea o QoS.
Masini e fa'atupu ai uta fa'aopoopo
vaivai:
- lata Mauaina-talafeagai
- talafeagai-maua faʻaleleia
- talafeagai-maua le pipi-pip
- pip faʻapipiʻi mysql-connector-python-rf
Faʻapipiʻi MariaDB, Faʻafefea :
apt-get install libmariadbclient-dev
mysql -e "INSTALL PLUGIN blackhole SONAME 'ha_blackhole.so';" -- Š½ŃŠ¶Š½Š¾ Š“Š»Ń test_employees_shaSu'e fa'avae su'e :
O lo'o fa'atulagaina le fa'amaumauga e pei ona fa'ailoa mai :
mysql -t < employees.sql
mysql -t < test_employees_sha.sqlFa'avae su'ega la'ititi:
laulau
RowsCount
Tele fa'amaumauga (MB)
Fa'asinomaga tele (KB)
matagaluega
9
0.02
16.00
dept_emp
331143
11.52
5648.00
dept_manager
24
0.02
16.00
tagata faigaluega
299379
14.52
0.00
totogi
2838426
95.63
0.00
suafa
442783
19.56
0.00
O se su'ega muamua o lo'o tusia i luga o le tulivae i le Python e fa'atino ai gaioiga:
- getState: toe faafoi le tulaga
- getEmployee: toe fa'afo'i tagata faigaluega (+totogi, +suafa) mai le fa'amaumauga
- patchEmployee: suia fanua faigaluega
- insertSalary: fa'aofi se totogi
Punavai o auaunaga (dbtest.py)
#!/usr/bin/python
import mysql.connector as mariadb
from flask import Flask, json, request, abort
from mysql.connector.constants import ClientFlag
app = Flask(__name__)
def getFields(cursor):
results = {}
column = 0
for d in cursor.description:
results[d[0]] = column
column = column + 1
return results
PAGE_SIZE = 30
@app.route("/")
def main():
return "Hello!"
@app.route("/employees/<page>", methods=['GET'])
def getEmployees(page):
offset = (int(page) - 1) * PAGE_SIZE
connection = mariadb.connect(user='admin', password='q5XpRomdSr', database='employees')
cursor = connection.cursor()
cursor.execute("SELECT * FROM employees LIMIT {} OFFSET {}".format(PAGE_SIZE, offset))
return {'employees': [i[0] for i in cursor.fetchall()]}
@app.route("/employee/<id>", methods=['GET'])
def getEmployee(id):
id = int(id)
connection = mariadb.connect(user='admin', password='q5XpRomdSr', database='employees')
cursor = connection.cursor()
cursor.execute("SELECT * FROM employees WHERE emp_no = {}".format(id))
fields = getFields(cursor)
employee = {}
found = False
for row in cursor.fetchall():
found = True
employee = {
"birth_date": row[fields["birth_date"]],
"first_name": row[fields["first_name"]],
"last_name": row[fields["last_name"]],
"gender": row[fields["gender"]],
"hire_date": row[fields["hire_date"]]
}
if not found:
abort(404)
cursor.execute("SELECT * FROM salaries WHERE emp_no = {}".format(id))
fields = getFields(cursor)
salaries = []
for row in cursor.fetchall():
salary = {
"salary": row[fields["salary"]],
"from_date": row[fields["from_date"]],
"to_date": row[fields["to_date"]]
}
salaries.append(salary)
employee["salaries"] = salaries
cursor.execute("SELECT * FROM titles WHERE emp_no = {}".format(id))
fields = getFields(cursor)
titles = []
for row in cursor.fetchall():
title = {
"title": row[fields["title"]],
"from_date": row[fields["from_date"]],
"to_date": row[fields["to_date"]]
}
titles.append(title)
employee["titles"] = titles
return json.dumps({
"status": "success",
"employee": employee
})
def isFieldValid(t, v):
if t == "employee":
return v in ["birdth_date", "first_name", "last_name", "hire_date"]
else:
return false
@app.route("/employee/<id>", methods=['PATCH'])
def setEmployee(id):
id = int(id)
content = request.json
print(content)
setList = ""
data = []
for k, v in content.iteritems():
if not isFieldValid("employee", k):
continue
if setList != "":
setList = setList + ", "
setList = setList + k + "=%s"
data.append(v)
data.append(id)
print(setList)
print(data)
connection = mariadb.connect(user='admin', password='q5XpRomdSr', database='employees', client_flags=[ClientFlag.FOUND_ROWS])
cursor = connection.cursor()
cursor.execute("UPDATE employees SET {} WHERE emp_no = %s".format(setList), data)
connection.commit()
if cursor.rowcount < 1:
abort(404)
return json.dumps({
"status": "success"
})
@app.route("/salary", methods=['PUT'])
def putSalary():
content = request.json
print(content)
connection = mariadb.connect(user='admin', password='q5XpRomdSr', database='employees', client_flags=[ClientFlag.FOUND_ROWS])
cursor = connection.cursor()
data = [content["emp_no"], content["salary"], content["from_date"], content["to_date"]]
cursor.execute("INSERT INTO salaries (emp_no, salary, from_date, to_date) VALUES (%s, %s, %s, %s)", data)
connection.commit()
return json.dumps({
"status": "success"
})
@app.route("/state", methods=['GET'])
def getState():
return json.dumps({
"status": "success",
"state": "working"
})
if __name__ == '__main__':
app.run(host='0.0.0.0',port='5002')
Faʻamolemole faʻamolemole! I lalo ole tulaga e le tatau ona avea lenei auaunaga o se faʻataʻitaʻiga poʻo se taʻiala!
E faia su'ega e fa'aaoga ai le JMeter tuai. O se faasologa o suʻega e umi mai le 15 minute i le 2 itula na faʻalauiloaina, e aunoa ma se faʻalavelave, o le pasene o talosaga e fesuisuiaʻi, ma o le gaosiga e ese mai le 300 i le 600 talosaga i le minute. Numera o filo mai le 50 i le 500.
Ona o le mea moni o le database e laʻititi tele, o le poloaiga:
mysql -e "SHOW ENGINE INNODB STATUS"E fa'aalia ai:
Buffer pool hit rate 923 / 1000, young-making rate 29 / 1000 not 32 / 1000O lo'o i lalo le averesi taimi tali mo talosaga:
pepa
lautele
Median
90%Laina
95%Laina
99%Laina
min
Max
maua Tagata faigaluega
37.64
12.57
62.28
128.5
497.57
5
4151.78
getState
17
7.57
30.14
58.71
193
3
2814.71
patch Tagata faigaluega
161.42
83.29
308
492.57
1845.14
5
6639.4
tuuTotogi
167.21
86.93
315.34
501.07
1927.12
7
6722.44
Atonu e faigata ia te oe ona faʻamasinoina mai nei faʻamatalaga faʻapitoa pe faʻafefea ona fetaui lenei VPS mo au galuega faʻapitoa ma, i se tulaga lautele, o auala o loʻo lisiina e faʻatapulaʻa i na mataupu e tatau ona matou taulimaina i se tasi ituaiga poʻo le isi manino e le atoatoa. Matou te valaʻauina oe e tusi au lava faʻaiuga ma faʻataʻitaʻi le server mo 30 rubles i au talosaga moni ma galuega ma fautua atu au filifiliga mo lenei faʻatulagaga i faʻamatalaga.
puna: www.habr.com
