Google Cloud Spanner՝ լավը, վատը և տգեղը

Բարև Խաբրովսկի բնակիչներ։ Ինչպես միշտ, մենք շարունակում ենք կիսվել հետաքրքիր նյութերով նոր դասընթացների մեկնարկին ընդառաջ։ Այսօր, հատկապես ձեզ համար, մենք հոդված ենք հրապարակել Google Cloud Spanner-ի մասին՝ դասընթացի մեկնարկին համընկնող։ «AWS մշակողների համար».

Google Cloud Spanner՝ լավը, վատը և տգեղը

Սկզբնապես հրապարակվել է Lightspeed HQ բլոգ.

Որպես ընկերություն, որն առաջարկում է ամպի վրա հիմնված POS լուծումներ ամբողջ աշխարհում մանրածախ վաճառողներին, ռեստորատորներին և առցանց վաճառողներին, Lightspeed-ը օգտագործում է տվյալների բազայի մի քանի տարբեր տիպի հարթակներ՝ գործարքային, վերլուծական և որոնման օգտագործման տարբեր դեպքերի համար: Տվյալների բազայի այս հարթակներից յուրաքանչյուրն ունի իր ուժեղ և թույլ կողմերը: Հետևաբար, երբ Google-ը շուկա ներկայացրեց Cloud Spanner-ը` խոստումնալից առանձնահատկություններ, որոնք չտեսնված են հարաբերական տվյալների շտեմարանների աշխարհում, ինչպիսիք են գրեթե անսահմանափակ հորիզոնական մասշտաբայնությունը և 99,999% ծառայության մակարդակի համաձայնագիրը (SLA), — մենք չէինք կարող բաց թողնել մեր ձեռքը բռնելու հնարավորությունը:

Cloud Spanner-ի հետ մեր փորձի համապարփակ ակնարկ տրամադրելու համար, ինչպես նաև գնահատման չափանիշները, որոնք մենք օգտագործել ենք, մենք կանդրադառնանք հետևյալ թեմաներին.

  1. Մեր գնահատման չափանիշները
  2. Cloud Spanner-ը մի խոսքով
  3. Մեր գնահատականը
  4. Մեր գտածոները

Google Cloud Spanner՝ լավը, վատը և տգեղը

1. Մեր գնահատման չափանիշները

Նախքան Cloud Spanner-ի առանձնահատկությունները, դրա նմանություններն ու տարբերությունները շուկայի այլ լուծումների հետ, նախ խոսենք այն հիմնական օգտագործման դեպքերի մասին, որոնք մենք մտքում ունեինք, երբ մտածում էինք, թե որտեղ տեղակայել Cloud Spanner-ը մեր ենթակառուցվածքում.

  • Որպես SQL տվյալների բազայի (գերակշռող) ավանդական լուծման փոխարինում
  • Ինչպես կատարել OLTP լուծում OLAP աջակցությամբ

Նշում: Պարզության և համեմատության հեշտության համար այս հոդվածը համեմատում է Cloud Spanner-ը GCP Cloud SQL և Amazon AWS RDS լուծումների ընտանիքների MySQL տարբերակների հետ:

Cloud Spanner-ի օգտագործումը որպես ավանդական SQL տվյալների բազայի լուծման փոխարինում

Շրջակա միջավայրում ավանդական տվյալների բազաները, երբ տվյալների բազայի հարցման պատասխանի ժամանակը մոտենում է կամ նույնիսկ գերազանցում է նախապես սահմանված հայտի շեմերը (հիմնականում օգտագործողների և/կամ հարցումների քանակի ավելացման պատճառով), կան մի քանի եղանակներ՝ արձագանքման ժամանակը ընդունելի մակարդակի հասցնելու համար: Այնուամենայնիվ, այս լուծումների մեծ մասը ներառում է ձեռքի միջամտություն:

Օրինակ, առաջին քայլը, որը պետք է ձեռնարկվի, պետք է դիտարկել կատարողականի հետ կապված տվյալների բազայի տարբեր պարամետրերը և կարգավորել դրանք, որպեսզի լավագույնս համապատասխանեն հավելվածների օգտագործման դեպքերի օրինակներին: Եթե ​​դա բավարար չէ, կարող եք ընտրել տվյալների բազայի մասշտաբը ուղղահայաց կամ հորիզոնական:

Հավելվածի ուղղահայաց մասշտաբը ենթադրում է սերվերի օրինակի թարմացում՝ սովորաբար ավելացնելով ավելի շատ պրոցեսորներ/միջուկներ, ավելի շատ RAM, ավելի արագ պահեստավորում և այլն: Ավելի շատ ապարատային ռեսուրսների ավելացումը հանգեցնում է տվյալների բազայի արդյունավետության բարձրացմանը, որը չափվում է հիմնականում երկրորդ գործարքներում, և գործարքների հետաձգումը OLTP համակարգերի համար: Հարաբերական տվյալների բազայի համակարգեր (որոնք օգտագործում են բազմաշերտ մոտեցում), ինչպիսին է MySQL-ը լավ սանդղակի ուղղահայաց:

Այս մոտեցման մի քանի թերություններ կան, բայց ամենաակնհայտը շուկայում սերվերի առավելագույն չափն է: Ամենամեծ սերվերի օրինակի սահմանին հասնելուց հետո մնում է միայն մեկ տարբերակ՝ հորիզոնական մասշտաբավորում:

Հորիզոնական մասշտաբավորումը մոտեցում է, որտեղ ավելի շատ սերվերներ են ավելացվում կլաստերին՝ իդեալականորեն բարձրացնելով կատարումը գծային կերպով, քանի որ սերվերների քանակն ավելանում է: Մեծամասնությունը ավանդական Տվյալների բազայի համակարգերը լավ չեն չափվում հորիզոնական կամ ընդհանրապես չեն մասշտաբվում: Օրինակ, MySQL-ը կարող է հորիզոնական մասշտաբել կարդալու գործողությունների համար՝ ավելացնելով ստրուկ ընթերցողներ, բայց չի կարող հորիզոնական մասշտաբել գրելու համար:

Մյուս կողմից, իր բնույթով, Cloud Spanner-ը կարող է հեշտությամբ հարթել հորիզոնական՝ նվազագույն միջամտությամբ:

Լիովին ներկայացված DBMS որպես ծառայություն պետք է գնահատել տարբեր տեսանկյուններից. Որպես հիմք՝ մենք վերցրել ենք ամպի մեջ ամենահայտնի DBMS-ը՝ Google-ի, GCP Cloud SQL-ի և Amazon-ի համար՝ AWS RDS-ի համար: Մեր գնահատման ժամանակ մենք կենտրոնացել ենք հետևյալ կատեգորիաների վրա.

  • Առանձնահատկությունների քարտեզագրում՝ SQL, DDL, DML ծավալ; կապի գրադարաններ/միակցիչներ, գործարքների աջակցություն և այլն:
  • Զարգացման աջակցություն. հեշտ մշակում և փորձարկում:
  • Ադմինիստրացիայի աջակցություն. օրինակների կառավարում, օրինակ՝ մեծացնել/նվազեցնել և կատարելագործել օրինակները; SLA, կրկնօրինակում և վերականգնում; անվտանգություն/մուտքի վերահսկում:

Օգտագործելով Cloud Spanner-ը որպես OLAP-ով միացված OLTP լուծում

Թեև Google-ը բացահայտորեն չի պնդում, որ Cloud Spanner-ը նախատեսված է վերլուծական մշակման համար, այն ունի որոշ հատկանիշներ այլ շարժիչների հետ, ինչպիսիք են Apache Impala & Kudu-ն և YugaByte-ը, որոնք նախատեսված են OLAP աշխատանքային ծանրաբեռնվածության համար:

Նույնիսկ եթե փոքր հավանականություն կար, որ Cloud Spanner-ը ներառեր հետևողական մասշտաբային HTAP (հիբրիդային գործարքների/վերլուծական մշակում) շարժիչ՝ (քիչ թե շատ) օգտագործելի OLAP գործառույթների հավաքածուով, մենք կարծում ենք, որ այն արժանի կլիներ մեր ուշադրությանը:

Սա նկատի ունենալով, մենք դիտարկեցինք հետևյալ կատեգորիաները.

  • Տվյալների բեռնում, ինդեքսներ և բաժանման աջակցություն
  • Հարցման կատարում և DML

2. Cloud Spanner-ը մի խոսքով

Google Spanner-ը կլաստերային հարաբերական տվյալների բազայի կառավարման համակարգ է (RDBMS), որը Google-ն օգտագործում է իր մի քանի ծառայությունների համար: Google-ն այն ընդհանուր առմամբ հասանելի դարձրեց Google Cloud Platform-ի օգտատերերին 2017 թվականի սկզբին:

Ահա Cloud Spanner-ի որոշ հատկանիշներ.

  • Բարձր հետևողական մասշտաբային RDBMS կլաստեր. օգտագործում է ապարատային ժամանակի համաժամացում՝ տվյալների հետևողականությունն ապահովելու համար:
  • Խաչասեղանի գործարքների աջակցություն. Գործարքները կարող են ընդգրկել մի քանի աղյուսակներ՝ պարտադիր չէ, որ սահմանափակվեն մեկ աղյուսակով (ի տարբերություն Apache HBase-ի կամ Apache Kudu-ի):
  • Հիմնական բանալիների վրա հիմնված աղյուսակներ. Բոլոր աղյուսակները պետք է ունենան հայտարարված հիմնական բանալի (PC), որը կարող է բաղկացած լինել աղյուսակի մի քանի սյունակներից: Աղյուսակային տվյալները պահվում են համակարգչի կարգով, ինչը այն դարձնում է շատ արդյունավետ և արագ համակարգչի որոնման համար: Ինչպես համակարգչի վրա հիմնված մյուս համակարգերը, իրականացումը պետք է մոդելավորվի՝ հաշվի առնելով նախապես նախագծված օգտագործման դեպքերը՝ հասնելու համար լավագույն կատարումը.
  • Գծավոր սեղաններ. Սեղանները կարող են ֆիզիկական կախվածություն ունենալ միմյանցից: Երեխաների աղյուսակի տողերը կարող են համընկնել մայր աղյուսակի տողերի հետ: Այս մոտեցումը արագացնում է հարաբերությունների որոնումը, որոնք կարող են հայտնաբերվել տվյալների մոդելավորման փուլում, ինչպիսիք են հաճախորդների և նրանց հաշիվ-ապրանքագրերի համատեղ տեղակայումը:
  • Ինդեքսներ. Cloud Spanner-ն աջակցում է երկրորդական ինդեքսներին: Ինդեքսը բաղկացած է ինդեքսավորված սյունակներից և ԱՀ-ի բոլոր սյունակներից: Ցանկության դեպքում ինդեքսը կարող է պարունակել նաև այլ ոչ ինդեքսավորված սյունակներ: Ինդեքսը կարող է փոխկապակցվել մայր աղյուսակի հետ՝ հարցումներն արագացնելու համար: Մի քանի սահմանափակումներ են կիրառվում ինդեքսների նկատմամբ, օրինակ՝ ինդեքսում պահվող լրացուցիչ սյունակների առավելագույն քանակը: Բացի այդ, ինդեքսների միջոցով հարցումները կարող են լինել ոչ այնքան պարզ, որքան մյուս RDBMS-ներում:

«Cloud Spanner-ն ինքնաբերաբար ընտրում է ինդեքսը միայն հազվադեպ դեպքերում: Մասնավորապես, Cloud Spanner-ը ավտոմատ կերպով չի ընտրում երկրորդական ինդեքս, եթե հարցումը պահանջում է որևէ սյունակ, որը չի պահվում: ցուցանիշը .

  • Ծառայության մակարդակի համաձայնագիր (SLA). տեղակայում մեկ տարածաշրջանում SLA 99,99%; բազմատարածաշրջանային տեղակայումներ 99,999% SLA-ով: Թեև SLA-ն ինքնին պարզապես համաձայնություն է և ոչ մի երաշխիք, ես կարծում եմ, որ Google-ի մարդիկ ունեն որոշակի ծանր տվյալներ՝ նման ուժեղ պնդում անելու համար: (Հիման համար՝ 99,999%-ը նշանակում է ամսական 26,3 վայրկյան ծառայության անհասանելիություն:)
  • Ավելին, https://cloud.google.com/spanner/

Նշում: Apache Tephra նախագիծը ավելացնում է ընդլայնված գործարքների աջակցություն Apache HBase-ին (այժմ իրականացվում է նաև Apache Phoenix-ում որպես բետա):

3. Մեր գնահատականը

Այսպիսով, մենք բոլորս կարդացել ենք Google-ի պնդումները Cloud Spanner-ի առավելությունների մասին՝ գործնականում անսահմանափակ հորիզոնական մասշտաբում՝ պահպանելով բարձր հետևողականությունը և շատ բարձր SLA: Չնայած այս պահանջներին, ամեն դեպքում, չափազանց դժվար է իրականացնել, սակայն մեր նպատակը դրանք հերքելը չէր։ Փոխարենը, եկեք կենտրոնանանք այլ բաների վրա, որոնց մասին շատ են հետաքրքրում տվյալների բազայի օգտատերերը՝ հավասարություն և օգտագործելիություն:

Մենք գնահատեցինք Cloud Spanner-ը որպես Sharded MySQL-ի փոխարինող

Google Cloud SQL-ը և Amazon AWS RDS-ը՝ ամպային շուկայում ամենահայտնի OLTP DBMS-ներից երկուսը, ունեն շատ մեծ հնարավորություններ: Այնուամենայնիվ, այս տվյալների բազաները մեկ հանգույցի չափից ավելի մեծացնելու համար դուք պետք է կատարեք հավելվածի բաժանումը: Այս մոտեցումը լրացուցիչ բարդություն է ստեղծում ինչպես հավելվածների, այնպես էլ վարչարարության համար: Մենք նայեցինք, թե ինչպես է Spanner-ը տեղավորվում մի քանի բեկորներ մեկ օրինակում միավորելու սցենարի մեջ և ինչ հատկանիշներ (եթե այդպիսիք կան) կարող է անհրաժեշտ լինել զոհաբերել:

SQL, DML և DDL աջակցություն, ինչպես նաև միակցիչ և գրադարաններ:

Նախ, երբ սկսում եք ցանկացած տվյալների բազայից, դուք պետք է ստեղծեք տվյալների մոդել: Եթե ​​կարծում եք, որ կարող եք միացնել JDBC Spanner-ը ձեր սիրած SQL գործիքին, կտեսնեք, որ դուք կարող եք հարցումներ կատարել ձեր տվյալների հետ, բայց չեք կարող օգտագործել այն աղյուսակ ստեղծելու կամ փոփոխելու (DDL) կամ որևէ ներդիրի/թարմացման/ջնջման համար։ գործողություններ (DML): Google-ի պաշտոնական JDBC-ն չի աջակցում դրանցից որևէ մեկին:

«Վարորդները ներկայումս չեն աջակցում DML կամ DDL հայտարարությունները»:
Բանակի փաստաթղթեր

Իրավիճակն ավելի լավ չէ GCP վահանակի դեպքում. կարող եք ուղարկել միայն SELECT հարցումներ: Բարեբախտաբար, կա JDBC վարորդ, որն աջակցում է համայնքի DML-ին և DDL-ին, ներառյալ գործարքները github.com/olavloite/spanner-jdbc. Թեև այս դրայվերը չափազանց օգտակար է, Google-ի սեփական JDBC վարորդի բացակայությունը զարմանալի է: Բարեբախտաբար, Google-ն առաջարկում է բավականին լայն աջակցություն հաճախորդների գրադարանների համար (հիմնված gRPC-ի վրա)՝ C#, Go, Java, node.js, PHP, Python և Ruby:

Cloud Spanner հատուկ API-ների գրեթե պարտադիր օգտագործումը (JDBC-ում DDL-ի և DML-ի բացակայության պատճառով) հանգեցնում է որոշ սահմանափակումների՝ կապված կոդերի տարածքների համար, ինչպիսիք են կապի լողավազանները կամ տվյալների բազայի պարտադիր շրջանակները (օրինակ՝ Spring MVC): Սովորաբար, JDBC-ն օգտագործելիս դուք ազատ եք ընտրել ձեր սիրած կապի լողավազանը (օրինակ՝ HikariCP, DBCP, C3PO և այլն), որը փորձարկված է և լավ է աշխատում: Պատվերով Spanner API-ների դեպքում մենք պետք է հիմնվենք շրջանակների/պարտադիր լողավազանների/սեսիաների վրա, որոնք մենք ինքներս ենք ստեղծել:

Առաջնային բանալին (PC) կենտրոնացված դիզայնը թույլ է տալիս Cloud Spanner-ին շատ արագ լինել ԱՀ-ի միջոցով տվյալներ մուտք գործելիս, բայց նաև ներկայացնում է հարցումների որոշ խնդիրներ:

  • Դուք չեք կարող թարմացնել առաջնային բանալու արժեքը. Դուք նախ պետք է ջնջեք մուտքագրումը բնօրինակ ԱՀ-ից և նորից տեղադրեք այն նոր արժեքով: (Սա նման է այլ համակարգչի վրա հիմնված տվյալների բազայի/պահեստավորման շարժիչների:)
  • Ցանկացած UPDATE և DELETE հայտարարությունները WHERE-ում պետք է նշեն PC, հետևաբար չեն կարող լինել դատարկ DELETE բոլոր հայտարարությունները. միշտ պետք է լինի ենթահարկ, օրինակ՝ UPDATE xxx WHERE id IN (Ընտրեք id FROM աղյուսակից 1)
  • Ավտոմատ ավելացման տարբերակի բացակայություն կամ նմանատիպ որևէ այլ բան, որը սահմանում է PC դաշտի հաջորդականությունը: Որպեսզի դա աշխատի, համապատասխան արժեքը պետք է ստեղծվի հավելվածի կողմից:

Երկրորդական ինդեքսներ.

Google Cloud Spanner-ն ունի ներկառուցված աջակցություն երկրորդական ինդեքսների համար: Սա շատ գեղեցիկ հատկանիշ է, որը միշտ չէ, որ առկա է այլ տեխնոլոգիաներում: Apache Kudu-ն ներկայումս ընդհանրապես չի աջակցում երկրորդական ինդեքսներին, իսկ Apache HBase-ն ուղղակիորեն չի աջակցում ինդեքսներին, բայց կարող է դրանք ավելացնել Apache Phoenix-ի միջոցով:

Kudu-ի և HBase-ի ինդեքսները կարող են մոդելավորվել որպես առանձին աղյուսակ՝ առաջնային բանալիների տարբեր կազմով, սակայն հիմնական աղյուսակի և հարակից ինդեքսների աղյուսակների վրա կատարված գործողությունների ատոմականությունը պետք է կատարվի կիրառման մակարդակով և աննշան չէ՝ ճիշտ իրականացնելը:

Ինչպես նշվեց Cloud Spanner-ի վերանայման մեջ, դրա ինդեքսները կարող են տարբերվել MySQL ինդեքսներից: Հետևաբար, հարցումներ կառուցելիս և պրոֆիլներ կազմելիս պետք է հատուկ խնամք ցուցաբերել՝ ապահովելու համար, որ պատշաճ ինդեքսն օգտագործվի այնտեղ, որտեղ դա անհրաժեշտ է:

Ներկայացուցչությո՞ւնը:

Տվյալների բազայում շատ հայտնի և օգտակար օբյեկտ է դիտումները: Նրանք կարող են օգտակար լինել մեծ թվով օգտագործման դեպքերի համար. իմ երկու ֆավորիտներն են տրամաբանական վերացական շերտը և անվտանգության շերտը: Ցավոք, Cloud Spanner-ը ՉԻ աջակցում դիտումները: Այնուամենայնիվ, սա միայն մասամբ է մեզ սահմանափակում, քանի որ սյունակի մակարդակում մուտքի թույլտվությունների հստակություն չկա, որտեղ դիտումները կարող են կենսունակ լուծում լինել:

Տեսեք Cloud Spanner-ի փաստաթղթերը մի բաժնի համար, որը մանրամասնում է քվոտաներն ու սահմանափակումները (բանալին/քվոտաներ), մասնավորապես կա մեկը, որը կարող է խնդրահարույց լինել որոշ հավելվածների համար. Ակնհայտ է, որ սա կարող է մեծ խոչընդոտ հանդիսանալ տվյալների բազայի համար, որը նախատեսված է ավելի քան 100 տվյալների բազաների մասշտաբով: Բարեբախտաբար, Google-ի մեր տեխնիկական ներկայացուցչի հետ խոսելուց հետո մենք պարզեցինք, որ այս սահմանաչափը կարող է գրեթե ցանկացած արժեքի հասցնել Google Աջակցության միջոցով:

Զարգացման աջակցություն?

Cloud Spanner-ն առաջարկում է բավականին պատշաճ ծրագրավորման լեզվի աջակցություն իր API-ի հետ աշխատելու համար: Պաշտոնապես աջակցվող գրադարանները գտնվում են C#, Go, Java, node.js, PHP, Python և Ruby ոլորտներում: Փաստաթղթերը բավականին մանրամասն են, բայց ինչպես այլ առաջադեմ տեխնոլոգիաների դեպքում, համայնքը բավականին փոքր է տվյալների բազայի ամենատարածված տեխնոլոգիաների համեմատ, ինչը կարող է հանգեցնել ավելի շատ ժամանակ ծախսելու ավելի քիչ տարածված օգտագործման դեպքեր կամ խնդիրներ լուծելու համար:

Իսկ ի՞նչ կասեք տեղական զարգացմանն աջակցելու մասին:

Մենք չենք գտել «Cloud Spanner»-ի օրինակը ներսում: Ամենամոտ բանը, որ մենք ստացանք, Docker պատկերն էր: cockroachDB, որը սկզբունքորեն նման է, բայց գործնականում շատ տարբեր։ Օրինակ, CockroachDB-ն կարող է օգտագործել PostgreSQL JDBC: Քանի որ զարգացման միջավայրը պետք է հնարավորինս մոտ լինի արտադրական միջավայրին, Cloud Spanner-ը իդեալական չէ, քանի որ այն պետք է հիմնվի Spanner-ի ամբողջական օրինակի վրա: Ծախսերը խնայելու համար կարող եք ընտրել մեկ տարածաշրջանային օրինակ:

Ադմինիստրացիայի աջակցություն.

Cloud Spanner-ի օրինակ ստեղծելը շատ պարզ է: Պարզապես պետք է ընտրել բազմատարածաշրջանային կամ մեկ տարածաշրջանային օրինակ ստեղծելու միջև, նշել տարածաշրջան(ներ)ը և հանգույցների քանակը: Մեկ րոպեից էլ քիչ ժամանակում ձեր օրինակը կգործարկվի:

Մի քանի տարրական չափումներ ուղղակիորեն հասանելի են Google Console-ի Spanner էջից: Ավելի մանրամասն դիտումները հասանելի են Stackdriver-ի միջոցով, որտեղ կարող եք նաև սահմանել մետրային շեմեր և զգուշացման քաղաքականություն:

Մատչելիություն ռեսուրսների՞:

MySQL-ն առաջարկում է լայնածավալ և շատ հատիկավոր կարգավորումներ օգտատիրոջ թույլտվությունների/դերերի համար: Դուք կարող եք հեշտությամբ կարգավորել մուտքը դեպի կոնկրետ աղյուսակ կամ նույնիսկ դրա սյունակների ենթաբազմություն: Cloud Spanner-ն օգտագործում է Google-ի Identity & Access Management (IAM) գործիքը, որը թույլ է տալիս միայն քաղաքականություններ և թույլտվություններ սահմանել շատ բարձր մակարդակի վրա: Առավել հատիկավոր տարբերակը տվյալների բազայի մակարդակի լուծումն է, որը չի տեղավորվում արտադրական օգտագործման դեպքերի մեծ մասում: Այս սահմանափակումը ստիպում է ձեզ լրացուցիչ անվտանգության միջոցներ ավելացնել ձեր կոդը, ենթակառուցվածքը կամ երկուսն էլ՝ Spanner ռեսուրսների չարտոնված օգտագործումը կանխելու համար:

Պահուստավորումներ.

Պարզ ասած, Cloud Spanner-ում կրկնօրինակներ չկան: Թեև Google-ի SLA-ի բարձր պահանջները կարող են երաշխավորել, որ դուք չեք կորցնի որևէ տվյալ ապարատային կամ տվյալների բազայի խափանումների, մարդկային սխալների, հավելվածի թերությունների և այլնի պատճառով: Մենք բոլորս գիտենք կանոնը. բարձր հասանելիությունը չի կարող փոխարինել ձայնային պահուստավորման ռազմավարությանը: Ներկայումս տվյալների կրկնօրինակման միակ միջոցը տվյալների բազայից ծրագրային կերպով փոխանցելն է առանձին պահեստային միջավայր:

Հարցում կատարե՞լ:

Մենք օգտագործել ենք Yahoo!-ն տվյալների բեռնման և հարցումների փորձարկման համար: Cloud Serving Benchmark. Ստորև բերված աղյուսակը ցույց է տալիս YCSB-ի ծանրաբեռնվածությունը B՝ կարդալու և գրելու 95% հարաբերակցությամբ:

Google Cloud Spanner՝ լավը, վատը և տգեղը

* Բեռնվածության փորձարկումն իրականացվել է n1-standard-32 Compute Engine (CE) (32 vCPU, 120 ԳԲ հիշողություն) վրա, և փորձարկման օրինակը երբեք չի եղել թեստերի խոչընդոտ:
** Մեկ YCSB օրինակում շղթաների առավելագույն քանակը 400 է: Ընդհանուր առմամբ 2400 շղթա ստանալու համար պետք է իրականացվեին YCSB թեստերի վեց զուգահեռ օրինակներ:

Նայելով հենանիշի արդյունքներին, մասնավորապես պրոցեսորի բեռնվածության և TPS-ի համակցմանը, մենք կարող ենք հստակ տեսնել, որ Cloud Spanner-ը բավականին լավ է չափվում: Մեծ թվով թելերով ստեղծված ծանր բեռը փոխհատուցվում է Cloud Spanner կլաստերի մեծ թվով հանգույցներով: Թեև հետաձգումը բավականին բարձր է թվում, հատկապես 2400 թելերով աշխատելիս, ավելի ճշգրիտ թվեր ստանալու համար կարող է անհրաժեշտ լինել հաշվողական շարժիչի 6 փոքր օրինակների հետ կրկին փորձարկում: Յուրաքանչյուր օրինակ կանցկացնի մեկ YCSB թեստ՝ 6 զուգահեռ թեստերով մեկ մեծ CE օրինակի փոխարեն: Այսպիսով, ավելի հեշտ կլինի տարբերակել Cloud Spanner-ի հարցման հետաձգումը և Cloud Spanner-ի և փորձարկումն իրականացնող CE օրինակի միջև ցանցային կապի միջոցով ավելացված ուշացումը:

Ինչպե՞ս է Cloud Spanner-ը գործում որպես OLAP:

Բաժանման?

Տվյալների բաժանումը ֆիզիկապես և/կամ տրամաբանորեն անկախ հատվածների, որոնք կոչվում են միջնապատեր, շատ տարածված հասկացություն է, որը կարելի է գտնել OLAP շարժիչների մեծ մասում: Միջնորմները կարող են զգալիորեն բարելավել հարցումների կատարումը և տվյալների բազայի պահպանումը: Բաժանման մեջ ավելի խորանալը կլինի առանձին հոդված(ներ), ուստի եկեք պարզապես նշենք բաժանման և ենթաբաժինների սխեմա ունենալու կարևորությունը: Տվյալները բաժանման և նույնիսկ ավելի ենթաբաժանումների բաժանելու ունակությունը վերլուծական հարցումների կատարման բանալին է:

Cloud Spanner-ը չի աջակցում միջնորմները որպես այդպիսին: Այն ներքին տվյալների բաժանում է այսպես կոչված պառակտում-ներ հիմնված առաջնային բանալիների տիրույթների վրա: Բաժանումն իրականացվում է ավտոմատ կերպով՝ Cloud Spanner կլաստերի բեռը հավասարակշռելու համար: Cloud Spanner-ի շատ օգտակար հատկանիշը մայր աղյուսակի հիմնական բեռնվածության բաժանումն է (աղյուսակ, որը միախառնված չէ մյուսի հետ): Բանալն ավտոմատ կերպով հայտնաբերում է, թե արդյոք այն պարունակում է պառակտում տվյալներ, որոնք ավելի հաճախ են կարդացվում, քան մյուսներում պառակտում-այ, և կարող է որոշել հետագա բաժանումը: Այս կերպ ավելի շատ հանգույցներ կարող են ներգրավվել հարցման մեջ, ինչը նաև արդյունավետորեն մեծացնում է թողունակությունը:

Տվյալների բեռնում:

Cloud Spanner մեթոդը զանգվածային տվյալների համար նույնն է, ինչ սովորական բեռնման դեպքում: Առավելագույն արդյունավետության հասնելու համար դուք պետք է հետևեք որոշ ուղեցույցների, ներառյալ.

  • Տեսակավորեք ձեր տվյալները ըստ հիմնական բանալիի:
  • Բաժանիր դրանք 10-ի *հանգույցների քանակը առանձին բաժիններ.
  • Ստեղծեք աշխատանքային առաջադրանքների մի շարք, որոնք զուգահեռաբար բեռնում են տվյալները:

Այս տվյալների բեռնումն օգտագործում է Cloud Spanner-ի բոլոր հանգույցները:

Մենք օգտագործել ենք YCSB աշխատանքային ծանրաբեռնվածություն A՝ 10 միլիոն տողերի տվյալների բազա ստեղծելու համար:

Google Cloud Spanner՝ լավը, վատը և տգեղը

* Բեռնվածության փորձարկումն իրականացվել է n1-standard-32 հաշվողական շարժիչով (32 vCPU, 120 ԳԲ հիշողություն), և փորձարկման օրինակը երբեք չի եղել թեստերի խոչընդոտ:
** Մեկ հանգույցի տեղադրումը խորհուրդ չի տրվում արտադրական ծանրաբեռնվածության համար:

Ինչպես նշվեց վերևում, Cloud Spanner-ը ավտոմատ կերպով մշակում է բաժանումները՝ ելնելով դրանց ծանրաբեռնվածությունից, ուստի արդյունքները բարելավվում են մի քանի անընդմեջ թեստային կրկնություններից հետո: Այստեղ ներկայացված արդյունքները մեր ստացած լավագույն արդյունքներն են: Նայելով վերը նշված թվերին՝ մենք կարող ենք տեսնել, թե ինչպես է Cloud Spanner-ը մասշտաբվում (լավ), քանի որ կլաստերի հանգույցների թիվը մեծանում է: Առանձնահատուկ թվերն են չափազանց ցածր միջին ուշացումները, որոնք հակասում են խառը ծանրաբեռնվածության արդյունքներին (95% կարդալ և 5% գրել), ինչպես նկարագրված է վերը նշված բաժնում:

Սանդղակա՞ն:

Cloud Spanner հանգույցների քանակի ավելացումն ու նվազումը մեկ սեղմումով խնդիր է: Եթե ​​ցանկանում եք արագ բեռնել տվյալները, կարող եք մտածել ձեր օրինակը առավելագույնի հասցնելու մասին (մեր դեպքում դա եղել է 25 հանգույց ԱՄՆ-Արևելյան տարածաշրջանում) և այնուհետև կրճատել ձեր սովորական բեռնման համար իրավասու հանգույցների թիվը, երբ բոլոր տվյալները մուտքագրվեն: տվյալների բազան՝ նկատի ունենալով 2TB/հանգույցի սահմանաչափը:

Մեզ հիշեցրին այս սահմանի մասին նույնիսկ շատ ավելի փոքր տվյալների բազայի դեպքում: Բեռնվածության փորձարկումների մի քանի փորձարկումներից հետո մեր տվյալների բազան մոտավորապես 155 ԳԲ էր, և երբ փոքրացվեց մինչև 1 հանգույցի օրինակ, մենք ստացանք հետևյալ սխալը.

Google Cloud Spanner՝ լավը, վատը և տգեղը

Մեզ հաջողվեց նվազեցնել 25-ից մինչև 2 դեպք, բայց մենք խրված էինք երկու հանգույցներում:

Cloud Spanner կլաստերի հանգույցների քանակի ավելացումն ու նվազումը կարող է ավտոմատացվել REST API-ի միջոցով: Սա կարող է հատկապես օգտակար լինել զբաղված աշխատանքային ժամերին համակարգի ավելացած բեռը նվազեցնելու համար:

OLAP հարցումների կատարումը:

Մենք ի սկզբանե նախատեսում էինք զգալի ժամանակ հատկացնել Spanner-ի մեր գնահատմանը այս մասի վրա: Մի քանի SELECT COUNT-ից հետո մենք անմիջապես հասկացանք, որ փորձարկումը կարճ է լինելու, և որ Spanner-ը չի լինի հարմար շարժիչ OLAP-ի համար: Անկախ կլաստերի հանգույցների քանակից, 10M տողերի աղյուսակում տողերի քանակի ընտրությունը տևեց 55-ից 60 վայրկյան: Բացի այդ, ցանկացած հարցում, որն ավելի շատ հիշողություն էր պահանջում միջանկյալ արդյունքները պահելու համար, ձախողվեց OOM սխալով:

SELECT COUNT(DISTINCT(field0)) FROM usertable; — (10M distinct values)-> SpoolingHashAggregateIterator ran out of memory during new row.

TPC-H հարցումների որոշ թվեր կարելի է գտնել Թոդ Լիպկոնի հոդվածում Nosql-kudu-spanner-slides.html, սլայդներ 42 և 43: Այս թվերը համապատասխանում են մեր սեփական արդյունքներին (ցավոք,):

Google Cloud Spanner՝ լավը, վատը և տգեղը

4. Մեր եզրակացությունները

Հաշվի առնելով Cloud Spanner-ի առանձնահատկությունների ներկայիս վիճակը, դժվար է պատկերացնել, որ այն պարզ փոխարինում է ձեր առկա OLTP լուծմանը, հատկապես, երբ ձեր կարիքները գերազանցում են այն: Զգալի քանակությամբ ժամանակ պետք է ծախսվի Cloud Spanner-ի թերությունների շուրջ լուծումներ ստեղծելու համար:

Երբ մենք սկսեցինք Cloud Spanner-ի գնահատումը, մենք ակնկալում էինք, որ դրա կառավարման առանձնահատկությունները կհամապատասխանեն Google SQL-ի այլ լուծումներին կամ առնվազն շատ հեռու չեն լինի դրանցից: Բայց մեզ զարմացրեց կրկնօրինակների իսպառ բացակայությունը և ռեսուրսների հասանելիության շատ սահմանափակ վերահսկողությունը: Էլ չեմ խոսում դիտումների, տեղական զարգացման միջավայրի, չաջակցվող հաջորդականությունների, JDBC առանց DML և DDL աջակցության և այլնի մասին:

Այսպիսով, որտե՞ղ է գնում մեկը, ով պետք է մասշտաբի գործարքների տվյալների բազան: Թվում է, թե շուկայում չկա մեկ լուծում, որը համապատասխանում է օգտագործման բոլոր դեպքերին: Կան բազմաթիվ փակ և բաց կոդով լուծումներ (որոնցից մի քանիսը նշված են այս հոդվածում), որոնցից յուրաքանչյուրն ունի իր ուժեղ և թույլ կողմերը, բայց դրանցից ոչ մեկը չի առաջարկում SaaS 99,999% SLA և բարձր հետևողականությամբ: Եթե ​​բարձր SLA-ն ձեր հիմնական նպատակն է, և դուք հակված չեք ստեղծելու հատուկ բազմաամպ լուծում, Cloud Spanner-ը կարող է լինել այն լուծումը, որը դուք փնտրում եք: Բայց դուք պետք է տեղյակ լինեք դրա բոլոր սահմանափակումներին:

Արդարության համար, Cloud Spanner-ը հանրությանը թողարկվեց միայն 2017-ի գարնանը, ուստի ողջամիտ է ակնկալել, որ դրա ներկայիս որոշ թերություններ կարող են ի վերջո վերանալ (հուսով եմ), և երբ դրանք անհետանան, դա կարող է փոխել խաղի փոփոխությունը: Ի վերջո, Cloud Spanner-ը Google-ի համար պարզապես կողմնակի նախագիծ չէ: Google-ն այն օգտագործում է որպես Google-ի այլ արտադրանքների հիմք: Եվ երբ Google-ը վերջերս փոխարինեց Megastore-ը Google Cloud Storage-ում Cloud Spanner-ով, այն թույլ տվեց Google Cloud Storage-ին դառնալ խիստ հետևողական գլոբալ մասշտաբով օբյեկտների ցուցակների համար (ինչը դեռևս այդպես չէ: Ամազոնին S3).

Այնպես որ, դեռ հույս կա... հույս ունենք։

Այսքանը: Ինչպես հոդվածի հեղինակը, մենք նույնպես շարունակում ենք հուսալ, բայց ի՞նչ կարծիքի եք այս մասին։ Գրեք մեկնաբանություններում

Բոլորին հրավիրում ենք այցելել մեր անվճար վեբինար որի շրջանակներում մենք ձեզ մանրամասն կպատմենք դասընթացի մասին «AWS մշակողների համար» OTUS-ից:

Source: www.habr.com

Добавить комментарий