Ndizosangalatsa kukhala ndi tinthu tating'ono tomwe timafunikira m'manja mwanu: cholembera chabwino ndi cholembera, pensulo yakuthwa, mbewa yabwino, zingwe zingapo zowonjezera, ndi zina zambiri. Zinthu zosazindikirika izi sizimazindikirika, komabe zimawonjezera chitonthozo kumoyo wanu. Ndi nkhani yomweyi ndi mapulogalamu osiyanasiyana a m'manja ndi apakompyuta: pojambula zithunzi zazitali, kuchepetsa kukula kwa fano, kufufuza ndalama zaumwini, madikishonale, omasulira, otembenuza, ndi zina zotero. Kodi muli nayo? - yomwe ili yotsika mtengo, yomwe imakhalapo nthawi zonse, ndipo imabweretsa ndalama zambiri? Ayi, osati yomwe kampani yanu ili nayo, koma yanu, "thumba" imodzi. Tidawona kuti zingakhale zachisoni kukhala opanda VPS yaying'ono mu 2019, monga kukhala wopanda cholembera chanu chanthawi zonse panthawi yankhani. Chomvetsa chisoni nchiyani pamenepa? Ndi chilimwe. Chabwino, ndi chirimwe. Chilimwe cha akatswiri a IT: kukhala kunyumba, kugwira ntchito zomwe mumakonda popanda kumva chisoni. Kotero, ife tinaganiza za izo ndipo tinachita izo.
Chikominisi chafika, abwenzi.
Ndiwokonda kwambiri - VPS yathu kwa makumi atatu
Tawerenga nkhani zambiri kuchokera kwa omwe akupikisana nawo ndi ogwiritsa ntchito zaka zitatu kapena zinayi zapitazo za chifukwa chomwe simukufunikira VPS yotsika mtengo. Zowona, kalelo, VPS "yotsika mtengo" inali kutsatsa koyera ndipo sikanatha kupereka magwiridwe antchito enieni. Koma nthawi zikusintha, mtengo wazinthu zenizeni ukutsika, ndipo ma ruble 30 pamwezi, titha kupereka izi:
- Purosesa: Intel Xeon 2 GHz (1 core)
- dongosolo Linux (Debian, Ubuntu, CentOS (ngati mukufuna)
- 1 adilesi ya IPv4 yodzipatulira
- 10GB yofulumira, yosungiramo bizinesi ya SSD
- RAM: 512 MB
- Kulipira pa sekondi iliyonse
- Magalimoto opanda malire
Mtengowu umakhala ndi zoletsa zina zaukadaulo, zambiri Kupereka kwathu kwakukulu: VPS kwa ma ruble 30.
Ndani angapindule ndi seva yeniyeni yotereyi? Pafupifupi aliyense: oyambitsa, okonda, opanga odziwa zambiri, okonda DIY, ngakhale makampani ena.
Kodi VPS iyi ndiyoyenera kuchita chiyani?
Tikuganiza kuti owerenga a Habr adzapeza njira yawoyawo yogwiritsira ntchito kasinthidwe, koma tidaganiza zophatikiza malingaliro athu - pokhapokha wina angafunike ndipo anyamatawo sakudziwa?
- Khazikitsani tsamba lanu losavuta, mbiri, CV yokhala ndi code, ndi zina zambiri. Inde, tsamba lopangidwa bwino limapangitsa chidwi kwa olemba anzawo ntchito. Ichitireni pa VPS yanu ndipo khalani ndi udindo pachitetezo chake komanso kukhazikika kwake, m'malo modalira ntchito zochitira alendo.
- Gwiritsani ntchito VPS pazolinga zamaphunziro: landirani projekiti yanu, phunzirani momwe seva ndi seva zimagwirira ntchito, yesani DNS, ndikumanga tsamba laling'ono lamaphunziro.
- Za telefoni. Nthawi zina mwini yekha, wogwira ntchito pawokha, kapena kampani yaying'ono kwambiri imafunikira telefoni ya IP, koma opereka chithandizo amakhala aumbombo. Ndi zophweka: pezani seva yanu, gulani nambala kuchokera kwa IP telephony provider, khazikitsani PBX yeniyeni, ndikupanga zowonjezera (ngati zikufunika). Ndasunga ndalama zambiri.
- Gwiritsani ntchito seva kuyesa mapulogalamu anu.
- Gwiritsani ntchito seva pazoyeserera za DIY, kuphatikiza kuwongolera ndi kusonkhanitsa deta kuchokera ku masensa anzeru akunyumba.
- Chochitika chachilendo chogwiritsa ntchito ndikulandira wothandizira wamalonda, bot bot, pa seva yanu. Mudzakhala ndi udindo wonse pakukhazikika ndi chitetezo cha seva, kutanthauza kuti mudzakhala ndi chida chokhazikika pakugulitsa masheya. Basi ngati wina ali ndi chidwi kapena akukonzekera kutero. 🙂
VPS iyi ilinso ndi ntchito mumakampani. Kupatula ntchito yamafoni yomwe tatchulayi, zinthu zingapo zosangalatsa zitha kukhazikitsidwa. Mwachitsanzo:
- Khazikitsani nkhokwe zazing'ono ndi zidziwitso zomwe zitha kupezeka patali ndi ogwira ntchito oyendayenda, mwachitsanzo, kudzera pa FTP. Izi zidzalola kusinthanitsa kwachangu kwa analytics aposachedwa, masinthidwe osinthidwa amagulu ogulitsa, zowonetsera, ndi zina.
- Perekani mwayi kwa ogwiritsa ntchito kapena makasitomala kwakanthawi kuti awonetse mapulogalamu kapena media.
VPS test drive ya 30 rubles - takuchitirani izi
Ma ruble a 30 ndi ochepa kwambiri moti simukufunanso kuchotsa khadi lanu kuti mulipire ndikuyesa. Nafenso nthawi zina timakhala aulesi, koma nthawi ino takuchitirani zonse. Tisanayambitse ma seva, tidayesa mayeso kuti tiwone chilichonse ndikuwonetsa zomwe ma seva amatha ndi dongosololi. Kuti tipangitse zinthu kukhala zosangalatsa, tidawonjezera kuyesa kopitilira muyeso ndikuyesa momwe kasinthidwe kameneka kangakhalire ngati kachulukidwe ndi katundu zidadutsa malire athu.
Wolandirayo anali wodzaza ndi makina angapo, aliyense akuchita ntchito zosiyanasiyana zomangidwa ndi CPU ndikugwiritsa ntchito mwachangu disk subsystem. Cholinga chake chinali kutengera kuchuluka kwa kachulukidwe kotumizidwa ndi kuchuluka kwa ntchito yofananira kapena yokulirapo kuposa momwe amapangira.
Kuwonjezera pa ntchito yokhazikika, tinayika makina atatu ogwiritsira ntchito pa intaneti omwe amasonkhanitsa ziwerengero zopangidwa pogwiritsa ntchito sysbench, zomwe zotsatira zake zapakati zaperekedwa pansipa, ndi makina 50 ogwiritsira ntchito pa intaneti omwe adapanga ntchito yowonjezera. Makina onse oyesera pa intaneti anali ndi kasinthidwe kofanana (single core, 512 GB RAM, 10 GB SSD), ndipo chithunzi chokhazikika chinasankhidwa ngati makina ogwiritsira ntchito. debian 9.6, yomwe imaperekedwa kwa ogwiritsa ntchito pa RUVDS.
Katunduyu adayesedwera kuti afananize ndi chilengedwe komanso kukula kwake ndi katundu wankhondo:
- Makina ena enieni anali kuyenda ndi katundu wochepa.
- Ena mwa makinawo adayesa kuyesa kutengera katundu pa purosesa (pogwiritsa ntchito zida )
- Pa ma VM otsalawo, tidayendetsa script yomwe idagwiritsa ntchito dd kukopera deta kuchokera ku data yokonzedweratu kupita ku diski yokhala ndi malire ogwiritsa ntchito pv (zitsanzo zitha kupezeka apa). и ).
Komanso, monga mukukumbukira, tinali ndi makina atatu otolera ma metric opangira.
Pa makina aliwonse, script imayendetsedwa mozungulira mphindi 15 zilizonse, zomwe zimayesa mayeso a sysbench a purosesa, kukumbukira, ndi disk.
sysbench.sh script
#!/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.txtZotsatira zimaperekedwa mumtundu wa sysbench kuti zitheke, koma mitengo yapakati pa nthawi yonse yoyeserera kuchokera pamakina onse imatengedwa. Chidulecho chingapezeke apa:
Sysbanch-avg.txtsysbench 0.4.12: multi-threaded system evaluation benchmark
Kuyesa mayeso ndi njira zotsatirazi:
Chiwerengero cha ulusi: 1
Kuchita benchmark ya CPU
Zingwe zinayamba!
Zachita.
Nambala yayikulu kwambiri yoyesedwa mu mayeso a CPU: 10000
Chidule cha mayeso:
Nthawi yonse: 19.2244 masekondi
Chiwerengero chonse cha zochitika: 10000
nthawi yonse yotengedwa ndi zochitika: 19.2104
ziwerengero pa pempho lililonse:
mphindi: 1.43 ms
pafupifupi: 1.92ms
kukula: 47.00 ms
Pafupifupi. 95 peresenti: 3.02 ms
Zingwe zopanda chilungamo:
zochitika (avg/stddev): 10000.0000/0.00
nthawi yopha (avg/stddev): 19.2104/0.00
sysbench 0.4.12: benchmark yoyeserera yamitundu yambiri
Kuyesa mayeso ndi njira zotsatirazi:
Chiwerengero cha ulusi: 1
Kuyesa kuthamanga kwa ntchito zokumbukira
Kukula kwa block block: 1K
Kukula kwa kukumbukira: 102400M
Mtundu wa ntchito zokumbukira: lembani
Mtundu wa Memory Scope: Global
Zingwe zinayamba!
Zachita.
Zomwe zachitika: 104857600 (328001.79 ops/mphindi)
102400.00 MB inasamutsidwa (320.32 MB/mphindi)
Chidule cha mayeso:
Nthawi yonse: 320.9155 masekondi
Chiwerengero chonse cha zochitika: 104857600
nthawi yonse yotengedwa ndi zochitika: 244.8399
ziwerengero pa pempho lililonse:
mphindi: 0.00 ms
pafupifupi: 0.00ms
kukula: 139.41 ms
Pafupifupi. 95 peresenti: 0.00 ms
Zingwe zopanda chilungamo:
zochitika (avg/stddev): 104857600.0000/0.00
nthawi yopha (avg/stddev): 244.8399/0.00
sysbench 0.4.12: benchmark yoyeserera yamitundu yambiri
Kuyesa mayeso ndi njira zotsatirazi:
Chiwerengero cha ulusi: 1
Mafayilo owonjezera otsegula mbendera: 0
128 mafayilo, 16 MB iliyonse
2 GB kukula kwa fayilo
Kukula kwa block 16 KB
FSYNC yanthawi zonse idayatsidwa, kuyimba fsync() pempho lililonse 100.
Kuyimba fsync () kumapeto kwa mayeso, Yathandizidwa.
Kugwiritsa ntchito mawonekedwe a synchronous I/O
Kuyesa motsatizana kulemba (kulenga).
Zingwe zinayamba!
Zachita.
Ntchito zomwe zidachitika: 0 Werengani, 131072 Lembani, 128 Zina = 131200 Total
Werengani 0b Yolembedwa 2Gb Total inasamutsidwa 2Gb (320.1Mb/sec)
20251.32 Zopempha / sec kuchitidwa
Chidule cha mayeso:
Nthawi yonse: 6.9972 masekondi
Chiwerengero chonse cha zochitika: 131072
nthawi yonse yotengedwa ndi zochitika: 5.2246
ziwerengero pa pempho lililonse:
mphindi: 0.01 ms
pafupifupi: 0.04ms
kukula: 96.76 ms
Pafupifupi. 95 peresenti: 0.03 ms
Zingwe zopanda chilungamo:
zochitika (avg/stddev): 131072.0000/0.00
nthawi yopha (avg/stddev): 5.2246/0.00
sysbench 0.4.12: benchmark yoyeserera yamitundu yambiri
Kuyesa mayeso ndi njira zotsatirazi:
Chiwerengero cha ulusi: 1
Mafayilo owonjezera otsegula mbendera: 0
128 mafayilo, 16 MB iliyonse
2 GB kukula kwa fayilo
Kukula kwa block 16 KB
FSYNC yanthawi zonse idayatsidwa, kuyimba fsync() pempho lililonse 100.
Kuyimba fsync () kumapeto kwa mayeso, Yathandizidwa.
Kugwiritsa ntchito mawonekedwe a synchronous I/O
Kuchita mayeso owerengera motsatizana
Zingwe zinayamba!
Zachita.
Ntchito zomwe zidachitika: 131072 Werengani, 0 Lembani, 0 Zina = 131072 Total
Werengani 2Gb Yolembedwa 0b Zonse zomwe zasamutsidwa 2Gb (91.32Mb/sec)
5844.8 Zopempha / sec kuchitidwa
Chidule cha mayeso:
Nthawi yonse: 23.1054 masekondi
Chiwerengero chonse cha zochitika: 131072
nthawi yonse yotengedwa ndi zochitika: 22.9933
ziwerengero pa pempho lililonse:
mphindi: 0.00 ms
pafupifupi: 0.18ms
kukula: 295.75 ms
Pafupifupi. 95 peresenti: 0.77 ms
Zingwe zopanda chilungamo:
zochitika (avg/stddev): 131072.0000/0.00
nthawi yopha (avg/stddev): 22.9933/0.00
sysbench 0.4.12: benchmark yoyeserera yamitundu yambiri
Kuyesa mayeso ndi njira zotsatirazi:
Chiwerengero cha ulusi: 1
Mafayilo owonjezera otsegula mbendera: 0
128 mafayilo, 16 MB iliyonse
2 GB kukula kwa fayilo
Kukula kwa block 16 KB
Chiwerengero cha zopempha mwachisawawa za IO: 10000
Werengani/Kulemba chiŵerengero cha mayeso ophatikizana mwachisawawa a IO: 1.50
FSYNC yanthawi zonse idayatsidwa, kuyimba fsync() pempho lililonse 100.
Kuyimba fsync () kumapeto kwa mayeso, Yathandizidwa.
Kugwiritsa ntchito mawonekedwe a synchronous I/O
Kuyesa mwachisawawa r/w
Zingwe zinayamba!
Zachita.
Ntchito zomwe zidachitika: 6000 Werengani, 4000 Lembani, 12800 Zina = 22800 Total
Werengani 93.75Mb Yolembedwa 62.5Mb Total inasamutsidwa 156.25Mb (1341.5Kb/sec)
85.61 Zopempha / sec kuchitidwa
Chidule cha mayeso:
Nthawi yonse: 152.9786 masekondi
Chiwerengero chonse cha zochitika: 10000
nthawi yonse yotengedwa ndi zochitika: 14.1879
ziwerengero pa pempho lililonse:
mphindi: 0.01 ms
pafupifupi: 1.41ms
kukula: 210.22 ms
Pafupifupi. 95 peresenti: 4.95 ms
Zingwe zopanda chilungamo:
zochitika (avg/stddev): 10000.0000/0.00
nthawi yopha (avg/stddev): 14.1879/0.00
Zotsatira ndizowonetsera, koma siziyenera kutengedwa ngati QoS.
Makina omwe amapanga katundu wowonjezera
Mapulogalamu:
- pangani zosinthika
- yongolerani bwino
- gwiritsani ntchito moyenerera python-pip
- pip kukhazikitsa mysql-connector-python-rf
Anaika MariaDB, Motani :
apt-get install libmariadbclient-dev
mysql -e "INSTALL PLUGIN blackhole SONAME 'ha_blackhole.so';" -- нужно для test_employees_shaMayesero ake atengedwa :
Base imayikidwa monga momwe zasonyezedwera. :
mysql -t < employees.sql
mysql -t < test_employees_sha.sqlMayeso ang'onoang'ono:
Table
RowsCount
Kukula kwa data (MB)
Kukula kwa index (KB)
makampani
9
0.02
16.00
dept_emp
331143
11.52
5648.00
dept_manager
24
0.02
16.00
antchito
299379
14.52
0.00
malipiro
2838426
95.63
0.00
maudindo
442783
19.56
0.00
Ntchito yoyeserera yakale, yolembedwa pa ntchentche ku Python, imagwira ntchito zinayi:
- getState: imabweretsanso mawonekedwe
- getEmployee: kubweza wogwira ntchito (+malipiro, + maudindo) kuchokera pankhokwe
- patchEmployee: imasintha magawo a antchito
- insertMalipiro: Amalowetsa malipiro
Gwero la ntchito (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')
Chonde chonde! Mulimonse momwe zingakhalire, ntchitoyi iyenera kutengedwa ngati chitsanzo kapena chitsogozo!
Mayesowa adachitidwa pogwiritsa ntchito trusty JMeter. Mayesero angapo adayendetsedwa, kuyambira mphindi 15 mpaka maola 2, popanda kusokoneza. Kuchuluka kwa zopemphazo kunkasiyanasiyana, ndipo zopemphazo zinkasiyana kuchokera 300 mpaka 600 pa mphindi imodzi. Chiwerengero cha ulusi chinali kuyambira 50 mpaka 500.
Chifukwa chakuti mazikowo ndi ochepa kwambiri kukula kwake, lamulo:
mysql -e "SHOW ENGINE INNODB STATUS"Zikuwonetsa kuti:
Buffer pool hit rate 923 / 1000, young-making rate 29 / 1000 not 32 / 1000M'munsimu muli nthawi yoyankha mafunso:
chizindikiro
Avereji
Zamkatikati
90% Line
95% Line
99% Line
Mphindi
Max
kupeza Wogwira ntchito
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
patchWogwira ntchito
161.42
83.29
308
492.57
1845.14
5
6639.4
kuikaSalary
167.21
86.93
315.34
501.07
1927.12
7
6722.44
Zingakhale zovuta kuweruza kuyenera kwa VPS iyi pazosowa zanu zenizeni kutengera zotsatira zopangira izi. Ponseponse, njira zomwe zatchulidwazi ndizochepa pazomwe takumana nazo mwanjira ina. Choncho, mndandanda wathu siwokwanira. Tikukulimbikitsani kuti mupange malingaliro anu ndikuyesa seva ya ma ruble 30 ndi mapulogalamu ndi ntchito zenizeni zapadziko lonse lapansi, ndikuwonetsa zomwe mungasankhe pakusintha uku mu ndemanga.
Source: www.habr.com
