Доштани ҳама чизҳои хурде, ки ба шумо лозиманд, дар нӯги ангуштони худ хеле хуб аст: қалам ва дафтарчаи хуб, қалами тез, муши бароҳат, якчанд кабелҳои иловагӣ ва ғайра. Ин чизҳои ноаён нодида гирифта мешаванд, аммо ба ҳаёти шумо роҳатӣ зам мекунанд. Ҳамин қисса бо барномаҳои гуногуни мобилӣ ва мизи корӣ низ ҳамин аст: барои гирифтани скриншотҳои дароз, барои кам кардани андозаи тасвир, барои пайгирии молияи шахсӣ, луғатҳо, тарҷумонҳо, табдилдиҳандаҳо ва ғайра. Оё шумо яке доред? — яке, ки арзон аст, ҳамеша дар даст аст ва арзиши зиёд меорад? Не, на он чизе, ки ширкати шумо дорад, балки он чизе, ки "ҷайбӣ"-и шумост. Мо фикр кардем, ки дар соли 2019 бе VPS-и хурд будан каме ғамангез хоҳад буд, мисли он ки бе қалами муқаррарии худ ҳангоми лексия будан. Дар ин чӣ ғамангез аст? Тобистон аст. Хуб, тобистон аст. Тобистони як мутахассиси IT: дар хона нишаста, бе ягон нишонае аз пушаймонӣ рӯи лоиҳаҳои дӯстдоштаи худ кор кардан. Пас, мо дар ин бора фикр кардем ва ин корро кардем.
Коммунизм фаро расид, рафиқон.
Ӯ хеле шахсӣ аст - VPS-и мо барои сӣ
Мо се ё чор сол пеш мақолаҳои зиёдеро аз рақибон ва корбарон дар бораи он ки чаро ба шумо VPS-и арзон лозим нест, хонда будем. Дуруст аст, ки дар он вақт VPS-и "арзон" як маркетинги холис буд ва наметавонист ягон функсияи воқеиро пешниҳод кунад. Аммо замонҳо тағйир меёбанд, арзиши захираҳои виртуалӣ пасттар мешавад ва бо 30 рубл дар як моҳ мо метавонем инро пешниҳод кунем:
- Протсессор: Intel Xeon 2 ГГц (1 ядро)
- система Linux (Debian, Ubuntu, CentOS (ихтиёрӣ)
- 1 суроғаи IPv4-и махсус
- 10 ГБ нигаҳдории зуд ва SSD-и сатҳи корхона
- RAM: 512 МБ
- Ҳисоббаробаркунӣ дар як сония
- Трафики бемаҳдуд
Нархнома ба маҳдудиятҳои иловагии техникӣ вобаста аст, тафсилот дар зер оварда шудааст Пешниҳоди олии мо: VPS барои 30 рубл.
Аз чунин сервери виртуалӣ кӣ фоида мебинад? Қариб ҳама: шурӯъкунандагон, мухлисон, таҳиягарони ботаҷриба, мухлисони корҳои худкор ва ҳатто баъзе ширкатҳо.
Ин VPS барои чӣ мувофиқ аст?
Мо фикр мекунем, ки хонандагони Habr бешубҳа роҳи худро барои истифодаи ин конфигуратсия пайдо мекунанд, аммо мо тасмим гирифтем, ки маҷмӯаи ғояҳои худро тартиб диҳем - танҳо дар сурате, ки касе ба он ниёз дошта бошад ва бачаҳо намедонанд?
- Вебсайти оддии худ, портфолио, резюмеи худро бо рамз ва ғайра ҷойгир кунед. Албатта, вебсайти хуб тарҳрезишуда ба корфармоён таассуроти мусбат мебахшад. Онро дар VPS-и худ ҷойгир кунед ва худатон барои амният ва устувории он масъул бошед, на ба хидматҳои хостинги анъанавӣ такя кунед.
- VPS-ро барои мақсадҳои таълимӣ истифода баред: лоиҳаи худро ҷойгир кунед, тарзи кори сервер ва системаи амалиётии серверро омӯзед, бо DNS таҷриба кунед ва як вебсайти хурди таълимӣ созед.
- Барои телефония. Баъзан соҳибкори инфиродӣ, фрилансер ё ширкати хеле хурд ба телефонияи IP сахт ниёз доранд, аммо провайдерҳо хеле хасис ҳастанд. Ҳама чиз оддӣ аст: сервери худро гиред, аз провайдери телефонияи IP рақам харед, PBX виртуалиро насб кунед ва васеъкуниҳо эҷод кунед (агар лозим бошад). Сарфа хеле зиёд аст.
- Барои санҷидани барномаҳои худ аз сервер истифода баред.
- Серверро барои таҷрибаҳои худсохт, аз ҷумла идоракунӣ ва ҷамъоварии маълумот аз сенсорҳои системаи хонаи интеллектуалӣ, истифода баред.
- Як ҳолати ғайриоддии истифода ин ҷойгир кардани ёвари савдои виртуалӣ, боти савдо, дар сервери шумост. Шумо барои устуворӣ ва амнияти сервер пурра масъул хоҳед буд, яъне шумо асбоби пурра идорашаванда барои савдои бозори саҳомӣ хоҳед дошт. Танҳо дар сурате, ки касе манфиатдор бошад ё нақшаи ин корро дошта бошад. 🙂
Ин VPS инчунин дар бахши корпоративӣ татбиқ мешавад. Илова бар хидмати телефонии дар боло зикршуда, якчанд хусусиятҳои ҷолибро метавон амалӣ кард. Масалан:
- Ҷойгиркунии пойгоҳҳои додаҳои хурд ва маълумоте, ки кормандони сафаркунанда метавонанд аз фосилаи дур, масалан, тавассути FTP, дастрас бошанд. Ин имкон медиҳад, ки таҳлили муосир, конфигуратсияҳои навшуда барои гурӯҳҳои фурӯш, презентатсияҳо ва ғайра зуд мубодила карда шаванд.
- Барои намоиши нармафзор ё васоити ахбори омма ба корбарон ё муштариён дастрасии муваққатӣ фароҳам оваред.
Санҷиши VPS барои 30 рубл - мо инро барои шумо анҷом додем
30 рубл он қадар кам аст, ки шумо ҳатто намехоҳед корти худро барои пардохт ва санҷидан гиред. Мо баъзан танбал ҳам ҳастем, аммо ин дафъа мо ҳама чизро барои шумо кардем. Пеш аз ба кор андохтани серверҳо, мо як санҷиш гузаронидем, то ҳар як ҷузъиётро тафтиш кунем ва нишон диҳем, ки серверҳо бо ин нақша чӣ кор карда метавонанд. Барои ҷолибтар кардани корҳо, мо баъзе санҷишҳои шадидро илова кардем ва санҷидем, ки ин конфигуратсия чӣ гуна рафтор мекунад, агар зичӣ ва бор аз ҳадди муайяншудаи мо зиёд шавад.
Хост бо як қатор мошинҳои виртуалӣ пур карда шуда буд, ки ҳар кадоми онҳо вазифаҳои гуногуни марбут ба CPU-ро иҷро мекарданд ва аз зерсистемаи диск фаъолона истифода мебурданд. Ҳадаф симулятсияи ҷойгиркунии зичии баланд ва бори кории қобили муқоиса бо бори воқеии истеҳсолӣ ё аз он зиёдтар буд.
Илова бар бори кории доимӣ, мо се мошини виртуалиро насб кардем, ки метрикаҳои синтетикиро бо истифода аз sysbench ҷамъ мекарданд, ки натиҷаҳои миёнаи онҳо дар зер оварда шудаанд ва 50 мошини виртуалӣ, ки бори кории иловагиро ба вуҷуд оварданд. Ҳамаи мошинҳои виртуалии санҷидашуда конфигуратсияи якхела доштанд (як ядро, 512 ГБ RAM, 10 ГБ SSD) ва тасвири стандартӣ ҳамчун системаи амалиётӣ интихоб карда шуд. debian 9.6, ки ба корбарон дар RUVDS пешниҳод карда мешавад.
Бор аз ҷиҳати хусусият ва бузургӣ бо бори ҷангӣ қобили муқоиса буд:
- Баъзе мошинҳои виртуалӣ бо бори кам кор мекарданд.
- Баъзе аз мошинҳо сенарияи санҷиширо иҷро карданд, ки бори протсессорро тақлид мекард (бо истифода аз утилит )
- Дар VM-ҳои боқимонда, мо скриптеро иҷро кардем, ки аз фармони dd барои нусхабардории маълумот аз маълумоти пешакӣ омодашуда ба диск бо маҳдудияти муқарраршуда бо истифода аз pv истифода бурд (мисолҳоро дар ин ҷо пайдо кардан мумкин аст). и ).
Ҳамчунин, чунон ки шумо дар хотир доред, мо се мошин доштем, ки метрикаҳои синтетикиро ҷамъ мекарданд.
Дар ҳар як мошин, скрипт ба таври даврӣ ҳар 15 дақиқа иҷро мешуд, ки санҷишҳои стандартии sysbench-ро барои протсессор, хотира ва диск иҷро мекунад.
скрипти 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.txtНатиҷаҳо барои қулайӣ дар формати sysbench пешниҳод карда мешаванд, аммо арзишҳои миёна барои тамоми давраи санҷиш аз ҳамаи мошинҳо гирифта шудаанд. Хулосаро дар ин ҷо пайдо кардан мумкин аст:
Sysbanch-avg.txtsysbench 0.4.12: multi-threaded system evaluation benchmark
Озмоишро бо имконоти зерин иҷро кунед:
Шумораи риштаҳо: 1
Андозаи иҷрои CPU-ро иҷро кардан
Роҳҳо оғоз ёфт!
Муҳокима.
Ҳадди аксар шумораи асосии санҷидашуда дар санҷиши CPU: 10000
Хулосаи иҷрои санҷиш:
Вақти умумӣ: 19.2244 сония
Шумораи умумии чорабиниҳо: 10000
вақти умумии сарфшуда барои иҷрои рӯйдод: 19.2104
Омори ҳар як дархост:
дақ: 1.43 мс
миёна: 1.92мс
ҳадди аксар: 47.00 мс
Тақрибан 95 процентил: 3.02 мс
Риштаҳои адолат:
рӯйдодҳои (avg / stddev): 10000.0000 / 0.00
вақти иҷро (avg / stddev): 19.2104 / 0.00
sysbench 0.4.12: меъёри арзёбии системаи бисёрриштавӣ
Озмоишро бо имконоти зерин иҷро кунед:
Шумораи риштаҳо: 1
Санҷиши суръати амалиёти хотира
Андозаи блоки хотира: 1K
Андозаи интиқоли хотира: 102400M
Навъи амалиёти хотира: навиштан
Навъи доираи хотира: глобалӣ
Роҳҳо оғоз ёфт!
Муҳокима.
Амалиётҳои анҷомдодашуда: 104857600 (328001.79 амалиёт/сония)
102400.00 МБ интиқол дода шуд (320.32 МБ/сония)
Хулосаи иҷрои санҷиш:
Вақти умумӣ: 320.9155 сония
Шумораи умумии чорабиниҳо: 104857600
вақти умумии сарфшуда барои иҷрои рӯйдод: 244.8399
Омори ҳар як дархост:
дақ: 0.00 мс
миёна: 0.00мс
ҳадди аксар: 139.41 мс
Тақрибан 95 процентил: 0.00 мс
Риштаҳои адолат:
рӯйдодҳои (avg / stddev): 104857600.0000 / 0.00
вақти иҷро (avg / stddev): 244.8399 / 0.00
sysbench 0.4.12: меъёри арзёбии системаи бисёрриштавӣ
Озмоишро бо имконоти зерин иҷро кунед:
Шумораи риштаҳо: 1
Парчамҳои кушодани файлҳои иловагӣ: 0
128 файл, ҳар кадоме 16 МБ
Андозаи умумии файл 2 ГБ
Андозаи блок 16 KB
FSYNC-и давравӣ фаъол аст, ки ҳар як 100 дархост fsync()-ро даъват мекунад.
Занг задан fsync() дар охири санҷиш, Фаъол.
Истифодаи режими синхронии I/O
Гузаронидани санҷиши пайдарпайи навиштан (офариниш)
Роҳҳо оғоз ёфт!
Муҳокима.
Амалиётҳои иҷрошуда: 0 Хонда шуд, 131072 Навиштан, 128 Дигар = 131200 Ҷамъ
Хондан 0b Навишта 2Gb Ҷамъи интиқолшуда 2Gb (320.1)Mb/sэк)
20251.32 Дархостҳо дар як сония иҷро шуданд
Хулосаи иҷрои санҷиш:
Вақти умумӣ: 6.9972 сония
Шумораи умумии чорабиниҳо: 131072
вақти умумии сарфшуда барои иҷрои рӯйдод: 5.2246
Омори ҳар як дархост:
дақ: 0.01 мс
миёна: 0.04мс
ҳадди аксар: 96.76 мс
Тақрибан 95 процентил: 0.03 мс
Риштаҳои адолат:
рӯйдодҳои (avg / stddev): 131072.0000 / 0.00
вақти иҷро (avg / stddev): 5.2246 / 0.00
sysbench 0.4.12: меъёри арзёбии системаи бисёрриштавӣ
Озмоишро бо имконоти зерин иҷро кунед:
Шумораи риштаҳо: 1
Парчамҳои кушодани файлҳои иловагӣ: 0
128 файл, ҳар кадоме 16 МБ
Андозаи умумии файл 2 ГБ
Андозаи блок 16 KB
FSYNC-и давравӣ фаъол аст, ки ҳар як 100 дархост fsync()-ро даъват мекунад.
Занг задан fsync() дар охири санҷиш, Фаъол.
Истифодаи режими синхронии I/O
Гузаронидани санҷиши мутолиаи пайдарпай
Роҳҳо оғоз ёфт!
Муҳокима.
Амалиётҳои иҷрошуда: 131072 Хонда шуд, 0 Навиштан, 0 Дигар = 131072 Ҷамъ
Хондан 2 Гб Навишта 0б Ҷамъи интиқолшуда 2 Гб (91.32)Mb/sэк)
5844.8 Дархостҳо дар як сония иҷро шуданд
Хулосаи иҷрои санҷиш:
Вақти умумӣ: 23.1054 сония
Шумораи умумии чорабиниҳо: 131072
вақти умумии сарфшуда барои иҷрои рӯйдод: 22.9933
Омори ҳар як дархост:
дақ: 0.00 мс
миёна: 0.18мс
ҳадди аксар: 295.75 мс
Тақрибан 95 процентил: 0.77 мс
Риштаҳои адолат:
рӯйдодҳои (avg / stddev): 131072.0000 / 0.00
вақти иҷро (avg / stddev): 22.9933 / 0.00
sysbench 0.4.12: меъёри арзёбии системаи бисёрриштавӣ
Озмоишро бо имконоти зерин иҷро кунед:
Шумораи риштаҳо: 1
Парчамҳои кушодани файлҳои иловагӣ: 0
128 файл, ҳар кадоме 16 МБ
Андозаи умумии файл 2 ГБ
Андозаи блок 16 KB
Шумораи дархостҳои тасодуфӣ барои IO-и тасодуфӣ: 10000
Таносуби хондан/навиштан барои санҷиши омехтаи тасодуфии IO: 1.50
FSYNC-и давравӣ фаъол аст, ки ҳар як 100 дархост fsync()-ро даъват мекунад.
Занг задан fsync() дар охири санҷиш, Фаъол.
Истифодаи режими синхронии I/O
Гузаронидани санҷиши тасодуфии r/w
Роҳҳо оғоз ёфт!
Муҳокима.
Амалиётҳои иҷрошуда: 6000 Хонда шуд, 4000 Навиштан, 12800 Дигар = 22800 Ҷамъ
Хонда шуд 93.75 Мб Навишта шуд 62.5 Мб Ҷамъи интиқол 156.25 Мб (1341.5 Кб/сония)
85.61 Дархостҳо дар як сония иҷро шуданд
Хулосаи иҷрои санҷиш:
Вақти умумӣ: 152.9786 сония
Шумораи умумии чорабиниҳо: 10000
вақти умумии сарфшуда барои иҷрои рӯйдод: 14.1879
Омори ҳар як дархост:
дақ: 0.01 мс
миёна: 1.41мс
ҳадди аксар: 210.22 мс
Тақрибан 95 процентил: 4.95 мс
Риштаҳои адолат:
рӯйдодҳои (avg / stddev): 10000.0000 / 0.00
вақти иҷро (avg / stddev): 14.1879 / 0.00
Натиҷаҳо нишондиҳанда мебошанд, аммо онҳоро набояд ҳамчун QoS қабул кард.
Мошинҳое, ки бори иловагиро эҷод мекунанд
Нармафзор:
- навсозии apt-get
- навсозӣ apt-get
- apt-get install python-pip
- pip насби mysql-connector-python-rf
MariaDB насб карда шуд, чӣ гуна :
apt-get install libmariadbclient-dev
mysql -e "INSTALL PLUGIN blackhole SONAME 'ha_blackhole.so';" -- нужно для test_employees_shaПойгоҳи озмоишӣ гирифта шудааст :
База мувофиқи нишондодашуда ҷойгир карда шудааст. :
mysql -t < employees.sql
mysql -t < test_employees_sha.sqlПойгоҳи хурди санҷишӣ:
Љадвали
Шумораи қаторҳо
Андозаи маълумот (МБ)
Андозаи индекс (KB)
шӯъбаҳо
9
0.02
16.00
шӯъбаи_эмп
331143
11.52
5648.00
мудири шӯъба
24
0.02
16.00
кормандон
299379
14.52
0.00
музди меҳнат
2838426
95.63
0.00
унвонҳо
442783
19.56
0.00
Як хидмати ибтидоии санҷишӣ, ки ба таври фаврӣ бо забони Python навишта шудааст, чор амалиётро иҷро мекунад:
- getState: вазъиятро бармегардонад
- getEmployee: кормандро (+маошҳо, +унвонҳо) аз пойгоҳи додаҳо бармегардонад
- patchEmployee: майдонҳои кормандонро тағир медиҳад
- insertSalary: Музди меҳнатро дохил мекунад
Манбаи хидматрасонӣ (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')
Диққат! Дар ҳеҷ сурат набояд ин хидматро ҳамчун намуна ё роҳнамо қабул кард!
Санҷишҳо бо истифода аз JMeter-и боэътимод анҷом дода шуданд. Як силсила санҷишҳо, ки аз 15 дақиқа то 2 соат давом мекарданд, бефосила гузаронида шуданд. Фоизи дархостҳо гуногун буд ва суръати интиқол аз 300 то 600 дархост дар як дақиқа фарқ мекард. Шумораи риштаҳо аз 50 то 500 буд.
Аз сабаби он, ки пойгоҳ аз ҷиҳати андоза хеле хурд аст, фармон:
mysql -e "SHOW ENGINE INNODB STATUS"Нишон медиҳад, ки:
Buffer pool hit rate 923 / 1000, young-making rate 29 / 1000 not 32 / 1000Дар зер вақти миёнаи посух барои дархостҳо оварда шудааст:
нархнома
миёна
Медион
90% Хат
95% Хат
99% Хат
Min
макс
Кормандро гиред
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
patchEmployee
161.42
83.29
308
492.57
1845.14
5
6639.4
ПутСалярӣ
167.21
86.93
315.34
501.07
1927.12
7
6722.44
Шумо метавонед дар асоси ин натиҷаҳои синтетикӣ баҳо додани мувофиқати ин VPS барои ниёзҳои мушаххаси худ душворӣ кашед. Умуман, усулҳои номбаршуда ба он ҳолатҳое маҳдуданд, ки мо дар ин ё он шакл дучор шудаем. Аз ин рӯ, рӯйхати мо бешубҳа пурра нест. Мо шуморо ташвиқ мекунем, ки хулосаҳои худро бароред ва сервери 30-рублиро бо барномаҳо ва вазифаҳои воқеии худ санҷед ва имконоти худро барои ин конфигуратсия дар шарҳҳо пешниҳод кунед.
Манбаъ: will.com
