Din moment ce acest lucru nu este obișnuitul bancare online și metode non-standard a dezvoltat, am decis să împartă detalii cu privire la modul în care am făcut acest proiect, care ne-a ajutat să-l construiască în mai puțin de 5 luni, și vorbesc despre unele detalii tehnice.
Cu alte cuvinte, ceea ce am făcut - poate fi numit Agile (dezvoltarea de software Agile), iar dacă mai precis, XP - Extreme Programming. Acest tip de proces de dezvoltare, am honed deja în multe dintre clienții noștri anterioare și foarte cu succes a folosit-o și lucrează în estoniană Swedbank-e.
arhitectură
„Ce? Joaca-cadru în bancă, esti, probabil, glumești?“ - a fost prima reacție de dezvoltatori familiare.
Să vedem ce a influențat decizia:
- Ne-am dorit să scrie în Java, pentru că avem o mulțime de experiență cu limba și platforma. Java nu este mort, dacă o folosiți în mod corect.
- Am avut o echipă relativ mică și un pic de timp, așa că a trebuit să fie cea mai productivă. Acest lucru ne-a ajutat ca un mediu de dezvoltare Intellij IDEA, de altfel, dezvoltat în St. Petersburg.
- Java ruleaza pe Linux, administrarea este uneori mai ușor și mai rapid decât oricine acolo windose. Ea mi-a confirmat peste administratori de bere, uzat cu aceeași soluție.
- Joaca-cadru face dezvoltarea de Java mai rapid automat recompilați și reîncărcați codul, și permite toate acestea pentru a rula pe mașina dvs. în câteva secunde, fără a devorând cantități uriașe de RAM, care este caracteristică de aplicație-servere din lume Java, și că ei nu ca start-up, în cazul în care productivitate evaluate mai presus de orice altceva.
- Desigur, la fel ca multe alte cadre, jocul rezolvă, de asemenea, mai multe probleme comune de dezvoltare de aplicatii web ca structurarea proiectului, etc. foarte elegant, aducând ușurința de limbi dinamice din lume Java. Multe dintre ideile inspirate de Ruby on Rails, Django pentru Python, și chiar NodeJS.
Desigur, este foarte util, și mulți ani de experiență în dezvoltarea de servicii bancare online anterioare și a altor sisteme de self-service pe Internet. Desigur, ne aflăm deja știut exact ce ne-am dorit să creeze o platformă foarte flexibil în mod specific pentru online banking bazat pe Play.
Ce altceva ne-a dat un bun joc?
Play - este complet cadru apatridă. El lucrează ca proiectat și funcționează HTTP - serverul nu știe nimic despre sesiunea utilizatorului nu alocă memorie suplimentară pentru ei, astfel încât aplicarea scalează liniar - prin creșterea numărului de servere la cele doua ori suntem capabili de a servi de două ori mai mulți utilizatori. Până în prezent, există doar două și acestea sunt foarte ușor încărcate. Serverele sunt situate în diferite centre de date, iar între ele este o distribuție a sarcinii prin intermediul DNS. Deoarece informațiile sesiunii de utilizator sunt stocate numai în cookie-ul, apoi căderea unuia dintre acești utilizatori sunt aruncate la a doua, fără a fi nevoie de o nouă intrare.
De asemenea, ne oferă posibilitatea de a face o actualizare a aplicației de la mijlocul zilei, fără a pierde utilizatori activi. În ziua lansării, vom actualiza aplicația de 4 ori, și toate acestea în timp ce am primit mai mult de 10 de cereri pe secundă de la utilizatori. Desigur, sunt semnate datele utilizatorului într-un cookie, astfel încât utilizatorul nu le poate falsifica.
Pentru a masca frânele cu performanțe reduse pe care le folosim Joaca integrarea cu memcached, care nu este o soluție standard din lume Java. Atunci când se lucrează cu cache-ul, noi, desigur, să ia în considerare faptul că intrările din aceasta nu poate fi, dar dacă ele sunt acolo, nu fac inutile și au tendința de a încetini interogările la ABS. Noi chiar datele podgruzhaem privind conturile de client și cărți înainte de a putea introduce codul de SMS-uri pentru autentificare.
Pentru a încărca în fundal foarte util pentru noi suport nativ pentru Job-uri în joc. de lucru pe baza de cuarț. Când introduceți parola corectă, vom rula doar la asincronă corespunzătoare Job într-un fir separat. Job-uri sunt, de asemenea, utilizate de către noi și multe alte sarcini de fundal în sectorul bancar on-line - de la procesarea plăților regulate înainte de adoptarea mesajelor bancare prin SMTP.
Dacă ați început deja vorbesc despre asincrone, trebuie remarcat și posibilitatea de a servi Redare mai multe cereri HTTP concurente la un singur fir, de asemenea, foarte mult de laudă NodeJS. Acest lucru economisește memorie și să servească un număr mult mai mare de utilizatori mai puține procese. Play oferă un cadru excelent pe baza de inducție Promite-uri și continuarea-uri, care desfășoară majoritatea operațiunilor I / O asincronă, eliberând fluxuri în acest moment pentru alte sarcini (pentru cei care dețin tema).
testarea
În cazul în care Play nu corespunde asteptarilor noastre - este automatizat teste (și cum altfel face mai multe actualizări pe zi în sistemul de luptă fără regresie?)
Play oferă suport de testare. dar este, în opinia noastră, nu este destul de adecvat - nu am dorit să rulați testele în browser, în special de unități teste, și ne-am dorit să avem un mod convenabil de a scrie cod folosind TDD (Driven Development Test) metodologie, și anume, scrie un test pentru codul chiar inexistentă și apoi scrie codul utilizând testul ca un test de pregătire. Cele mai multe dintre funcționalitatea poate fi acoperită de unități teste care încep și alerga mai repede decât de integrare. Atunci când aplicația trebuie să lucreze cu sisteme de terță parte, noi le facem un test răspunsuri de interogare în forma sa originală și scrie unitate de testare care primește răspunsurile stocate părților sistemului pentru a introduce și valida interpretarea intrare. Este foarte convenabil pentru dezvoltarea și documentația pentru comportamentul sistemului.
Pentru restul folosim biblioteca seleniură. dezvoltat de compania noastra pe baza de seleniu WebDriver. Acesta vă permite să scrie teste de interfață cu utilizatorul concis, să gestioneze un browser adevărat. Când executați teste folosind JUnit va porni automat întreaga bancă de Internet pentru a testa bază de date în memorie acest lucru, creați toate tabelele necesare sunt încărcate cu datele de testare, executați browser-ul și apoi executați deja script-uri de testare proprii. Toate acestea durează doar câteva secunde, ceea ce este important pentru dezvoltarea productivă. Toate testele, care acoperă majoritatea funcționalitatea aplicației, executați un pic mai mult de 5 minute, ceea ce ne oferă feedback-ul suficient de rapid în caz de regresie. Desigur, pentru a atinge această viteză, am trecut prin mai multe etape de optimizare a acestora. Motivația principală a fost de a optimiza că toate testele sunt parte a construi, mai degrabă decât fugi de ea, așa cum se face în majoritatea proiectelor.
Pentru construiește folosim Jenkins. Acesta monitorizează orice modificare a codului și imediat face o construcție nouă, pre-rularea testelor. Complet automat. Atunci când trebuie să se stabilească orice schimbare în mediul de luptă, vom lua pur și simplu pentru această ultimă udavshiysya construi ceva special pentru a face acest lucru nu este necesar. Dacă doriți o soluție rapidă, este suficient să se angajeze o schimbare în versionare (Git), și după 5 minute, este posibil să pariezi. Ca o regulă, un astfel de termen se bazează conține alte modificări care nu sunt urgente, deoarece acestea au fost deja testate la momentul respectiv, nu există nici o problemă cu ei intrând în mediul de luptă. Și, ceea ce face actualizări destul de des, cantitatea de schimbare este stabilită la un moment dat este mic, astfel încât probabilitatea ca un prejudiciu mare este foarte mică, și reveniți la o versiune anterioară, dacă este necesar, de asemenea, rulează cu nici un risc în exces.
Un pic lucruri mai complicate, cu actualizarea structurii bazei de date - dar conține suport built-in joc script-uri evolutive (numite uneori delta-script-uri). La instalarea unui nou build de banca Internet verifică revizuirea actuală a bazei sale de date și furnizează toate noile modificări, dacă este necesar, cum ar fi crearea de noi tabele, adăugarea de coloane, indici, și chiar asociate cu aceste schimbări, migrații de date. Fiecare construi de Internet Banking oferă un set complet de script-uri care pot fi folosite pentru a recrea întreaga bază de date de la zero (cu excepția datelor). Datorită acestei creșteri foarte ușor un nou mediu de dezvoltare sau de testare, atunci când este necesar.
Simplitatea / Usability
În ciuda tuturor clopotele și fluierele și modalitate eficientă de a dezvolta, nimeni nu va utiliza noua bancă pe Internet, în cazul în care acesta este complex sau de neînțeles pentru utilizator. „Nu mă face să mă gândesc“ carte bine-cunoscut numit Steve Krug pe acest subiect.
La începutul dezvoltării, avem un obiectiv de a face Internet-Banca de înțeles persoana medie, nu doar un contabil sau economist. Oamenii normali nu trebuie să știe ce cont de descoperit de cont sau de a juca trei declarații separate pentru a înțelege ceea ce ei cheltuiesc banii lor, servicii bancare on-line astfel încât să fie suficient de puternic pentru a transforma datele care provin din ABS. De asemenea, nu se poate supraîncărca utilizatorului supra-abundență de detalii. Totul trebuie să fie scurtă și la obiect.
Un alt aspect important - ideea este de a verifica pe oameni reali - casnice, elevi, angajați ai companiei, etc. În acest scop, banca a avut un uzabilitate-testare, în timpul căreia voluntarii au fost rugați să facă un anumit loc de muncă (de exemplu, „este setat la 100 $ la bunica ta“) și urmăriți cât de repede și ușor utilizatorii face cu ei. Acesta este un alt tip de feedback-ul necesar pentru a construi un produs de succes și intuitiv. Acesta vă permite să scrie o documentație pentru utilizator plictisitor, care oricum nu le citește nimeni.
În cazul în care sistemul se execută se produce toate aceeași eroare, în loc de abuz tehnic, vom arăta utilizatorului un formular cu un cod de eroare și capacitatea de a descrie ceea ce a dus la ea sau să vent emoțiile lor. La trimiterea unui mesaj feedback-ul este trimis, care vă permite să găsiți rapid cauza erorii în jurnal, și chiar să răspundă la utilizator, în cazul corecțiilor. Acest lucru ne-a ajutat foarte mult în primele zile ale lansării publice.
siguranță
Despre securitate online banking, puteți scrie o mulțime. Ne restricționați în faptul că cadrul de redare atunci când este utilizat în mod corespunzător previne imediat astfel cele mai frecvente atacuri de vectori precum XSS (Cross-site scripting) și SQL Injection - tot ceea ce este afișată utilizatorului trece prin forțată eskeyping și tot ce este trimis la baza de date prin intermediul JPA / JDBC Bindi și a trimis la server separat de textul cererii, excluzând posibilitatea schimbării sale de utilizator folosind interogări inteligent compilate. Această practică este elementar, dar, cu toate acestea, experții de audit de securitate de la o companie românească a admis că aceasta a fost prima aplicație le-am testat vreodată, în cazul în care nu a existat nici vulnerabilități serioase. Am fost multumiti, dar, desigur, numai un singur cadru nu poate rezolva complet toate problemele legate de securitate. Dezvoltatorii ar trebui să ne amintim întotdeauna ei înșiși despre lucruri, cum ar fi aparținând numerele de identificare sau de cont transmise clientului într-o sesiune activă. Pentru a nu lăsa o gaură undeva, ajută doar atenție la detalii și ani de experiență în dezvoltarea de aplicații web. Pentru aceasta, am doar în cazul în care el a trebuit să se schimbe, de asemenea, Play și dezactiva încărcarea automată a obiectelor din baza de date a identificatorul cererii de intrare. De asemenea, există încă atac mai viclean ca CSRF (Cross-site-ul cerere fals), sau chiar HTTP de divizare a răspunsului, hijack, reluarea atacurilor, etc. nevoie de prevenire din partea programatorilor.
Un alt factor important pentru siguranța și bunăstarea auditate - toate acțiunile sunt înregistrate în detaliu într-un format compact, adecvat pentru prelucrarea prin standard, unix-unelte, cu pachete cu un ID unic cerere și sesiune. Selectarea online banking platforma de operare (Linux), în acest caz este important.
În general, am fost foarte interesați și de plăcerea de a dezvolta această aplicație. Sperăm că simplitatea și claritatea noii bănci de Internet va fi apreciat de către clienții Băncii din București. Și pentru noi, dezvoltatorii, nu este nimic mai bun decât propriul cod, care lucrează într-un mediu de luptă, și face viața utilizatorilor un pic mai ușor! În momentul de față, vom continua să se dezvolte, astfel încât noi oportunități interesante vor fi în curând puse la dispoziția utilizatorilor. **
Am verificat noul site bancar și imediat a dat peste ceva interesant. Ca un utilizator anonim sub orice pagină, ați încercat să faceți clic pe link-ul „conectare“ din „Trebuie sa va logati pentru a proceeed (sic!)“ Caseta într-o altă țară decât browser-ul Chrome? ;)
Bine citit, noroc!
Ca utilizator mult timp de BSP bancar pe Internet (precum și alte bănci on-line, inclusiv TCS avansate), vreau să spun că proiectul dumneavoastră este cu siguranță un succes! De asemenea, nu pot menționa o soluție relativ rapidă a găsit (în stadii incipiente), bug-uri, care eu, ca utilizator, a scris în sprijinul banka.Snimayu pălărie, bine făcut!