Ubongo + VPS kwa 30 rubles =?

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? VPS - 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.

Ubongo + VPS kwa 30 rubles =?
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 tsamba 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 kupanikizika)
  • 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). apa и 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.txt

Zotsatira 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 apa:

apt-get install libmariadbclient-dev
mysql -e "INSTALL PLUGIN blackhole SONAME 'ha_blackhole.so';" -- нужно для test_employees_sha

Mayesero ake atengedwa kuchokera pano:

Base imayikidwa monga momwe zasonyezedwera. apa:

mysql -t < employees.sql
mysql -t < test_employees_sha.sql

Mayeso 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:

  1. getState: imabweretsanso mawonekedwe
  2. getEmployee: kubweza wogwira ntchito (+malipiro, + maudindo) kuchokera pankhokwe
  3. patchEmployee: imasintha magawo a antchito
  4. 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 / 1000

M'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

Gulani kuchititsa kodalirika kwamasamba okhala ndi chitetezo cha DDoS, ma seva a VPS VDS Gulani malo odalirika osungira mawebusayiti okhala ndi chitetezo cha DDoS, ma seva a VPS VDS | ProHoster