рдЬрд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ: рдП рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рдЧрд╛рдЗрдб

рдЖрдк рдЗрд╕ рдЧрд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреНрдпрд╛ рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдмрдирд╛рдПрдВрдЧреЗред рдФрд░ рдЬрд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рднреА рдХрд░реЗрдВред


рдиреЛрдЯ: ~ 7000 рд╢рдмреНрджреЛрдВ рдХрд╛ рдПрдХ рд▓реЗрдЦ рд╢рд╛рдпрдж рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдмреБрдХрдорд╛рд░реНрдХ рдХрд░реЗрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдПрдВред


рд╕рд╛рдордЧреНрд░реА



Java microservices рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ


рдЬрд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрд░реНрд╕ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рд╣реА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреБрдЦреНрдпрд╛рдд рдореЛрдиреЛрд▓рд┐рде, рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдлрд╛рдпрджреЗ рдпрд╛ рдиреБрдХрд╕рд╛рди рдХреНрдпрд╛ рд╣реИрдВред


рдЬрд╛рд╡рд╛ рдореЛрдиреЛрд▓рд┐рде рдХреНрдпрд╛ рд╣реИ?


рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдмреИрдВрдХ рдпрд╛ рдлрд┐рдирдЯреЗрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗ рдПрдХ рдирдпрд╛ рдмреИрдВрдХ рдЦрд╛рддрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЗрд╕ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕рд░рд▓реАрдХреГрдд рд░реВрдк рд╕реЗ , рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдЬреИрд╕реЗ рдХреБрдЫ рджрд┐рдЦрддрд╛ рд╣реИред


@Controller
class BankController {

    @PostMapping("/users/register")
    public void register(RegistrationForm form) {
        validate(form);
        riskCheck(form);
        openBankAccount(form);
        // etc..
    }
}

рдХреНрдпрд╛ рдЖрдк рдХрд░рдирд╛ рдпрд╣ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:


  1. рдкрдВрдЬреАрдХрд░рдг рдлреЙрд░реНрдо рдХреЛ рдорд╛рдиреНрдп рдХрд░реЗрдВред
  2. рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрддреЗ рдкрд░ рдЬреЛрдЦрд┐рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрд╕рдХреЗ рд▓рд┐рдП рдмреИрдВрдХ рдЦрд╛рддрд╛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
  3. рдмреИрдВрдХ рдЦрд╛рддрд╛ рдЦреЛрд▓реЗрдВ

BankController bank.jar bank.war : , , . ( .jar / .war 1-100 ).


.jar тАФ , Java.



Java ?


, Java . , :


  1. / / ...
  2. тАж
  3. тАФ ...

bank.jar , .


Java?


, . bank.jar JVM, . .


: ┬л , Mono (lithic) Bank, , , , Java.


Java?


, riskCheck() BankController / bean- Maven / Gradle, . .


RiskCheck , , ( ).


  1. , 5-7 ?
  2. 100 1000 ?
  3. - ?

, , :


  1. тАФ .
  2. , .

, : JVM, . JVM RiskCheck, JVM. .


?


Java ?


, : .


HTTP/REST


HTTP REST- , XML JSON тАФ (, , Google Protocol Buffers).


REST-, , , : , .


Java REST?



JMS / , AMQP. , / SMTP.


, , , ┬л ┬╗, -, , , - .


Java?


: REST API Java


, , Java . , , HTTP-.


@Controller
class BankController {

    @Autowired
    private HttpClient httpClient;

    @PostMapping("/users/register")
    public void register(RegistrationForm form) {
        validate(form);
        httpClient.send(riskRequest, responseHandler());
        setupAccount(form);
        // etc..
    }
}

, , Java () : RiskCheck. JVM, . :



, Java Microservices: ( .jar .war) .


: ? ? ?


.


Java


. , .



тАФ . , ┬л┬╗ , тАФ .


.


:


. :


  1. / / .
  2. , , , , , .
  3. , : , .

, Java- тАФ .


  1. , ┬л ┬╗, , , , .
  2. ┬л ┬╗, .
  3. , PDF .

: -


UML- , . , , . ?


, , , , ().


, , , 7- Hibernate , , , .


, ? , , .


@simonbrown Twitter:


тАж , .
I'll keep saying thisтАж if people can't build monoliths properly, microservices won't help.
Simon Brown


Java. , :


  1. , .
  2. , .
  3. : : , (: agile :) )

, Java .



, . Hadi Hariri (https://twitter.com/hhariri) ┬лExtract Microservice┬╗ IntelliJ.



, , , , .



@Service
class UserService {

    public void register(User user) {
        String email = user.getEmail();
        String username =  email.substring(0, email.indexOf("@"));
        // ...
    }
}

Java


@Service
class UserService {

    @Autowired
    private HttpClient client;

    public void register(User user) {
        String email = user.getEmail();
        // now calling the substring microservice via http
        String username =  httpClient.send(substringRequest(email), responseHandler());
        // ...
    }
}

, , , Java HTTP, . , , : Java.


: .


, workflow ( )


Java .


: , () , CRM .


, , , XML.


XML- ():


  1. , XML
  2. : 1- ?
  3. XML
  4. XML ,
  5. , ┬л ┬╗ ┬л, тАФ ┬╗

, .


. , , RabbitMQ, .



, , , :


  1. XML-?
  2. ? ? API?
  3. , ? ?
  4. (, , ), , ?
  5. / .

, , , . :



, , .


...


  • , .
  • , , , .
  • , , .
  • , (. Java ?).
  • , тАФ .

:


:


  • Netflix ( ) ...
  • , , Chaos Monkey, , 5 .
  • , @monzo 1500 , .

тЖТ .


. .:
Chaos Monkey тАФ Netflix stateless- тАФ - . Chaos Monkey , .

.


тАФ . (, ) , ( XML, XML, XML).


, , Java , , . .


, DevOps / / .


-


, : ( : ).


, XML Java, Haskell ( ), Erlang ( :) ).


, ( ), , , : .


, , Haskell , .


: . Fortune 500 Spring, ┬л ┬╗. тАФ , .


: , . : Kotlin Java ( JVM 100% ), Haskell Java.


Java


, . Java-, , тАФ .jar / .war.


Java, , , JVM: Java , , , Java, JVM).


, , Docker, Kubernetes The Cloud. ? :


Java


, monobank.jar () riskengine.jar ( ).


, , , .properties, URL .


, , :


-r-r------ 1 ubuntu ubuntu     2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar

ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...

-r-r------ 1 ubuntu ubuntu     2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar

ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...

: .properties .jar ?


, .


, SSH Ansible Java


, Java- тАФ , Java- 20 . :


  • (Maven, Gradle)
  • SSH / SCP .jars
  • Bash
  • : Ansible.

┬л┬╗ , chaos monkeys, , , ZooKeeper , .


, , .


Docker Java


. Docker .


, , :




, JVM . JVM.zip Raspberry Pi ( ), .jar.


, PHP Python, .


, Java- ( ): , Postgres, , Redis.


, Docker Java, Java, :


  • , Testcontainers.
  • "" . Discourse. Docker , , : Discourse, Ruby, Postgres, Redis.

Oracle , Docker.


, , .jar, :


  • JAR Docker
  • Docker

Docker Swarm Kubernetes Java


, Docker. , Java, Docker, .jar. Java, : .


: , Docker, , , (brrrr)?


тАФ Docker Swarm Kubernetes.


, : , YAML (. : Yaml) . , , .


, Java :


  • Docker Swarm / Kubernetes
  • YAML, .

Java


, , n- ? , , ?


:


  1. ( , Spring Boot), Wrapper.java тАФ , . .
  2. Docker Swarm Kubernetes .
  3. . DEV / TEST. , , .

, Java , , (, ActiveMQ RabbitMQ) , , , Java .


DevOps. Microservice Testing Libraries, .


, :


Java


, Java, , .


Java ?


, JVM
.


( , JVM ), .


, : , .


, , BillingService.


HTTP / REST


, . , - PDF.


, HTTP. ( , PDF . .)


@Service
class BillingService {

    @Autowired
    private HttpClient client;

     public void bill(User user, Plan plan) {
        Invoice invoice = createInvoice(user, plan);
        httpClient.send(invoiceRequest(user.getEmail(), invoice), responseHandler());
        // ...
    }
}

, HTTP-. , :


  1. : , .
  2. DELAYED: , .
  3. ERROR: , , .

, , . , API, .


Chaos Monkey, , , , .


тАФ . , , 50 10 . , , BillingService . , .


, , , , , , (, , , )


, , Hystrix Netflix. , .



. BillingService , , Spring RabbitMQ .


, RabbitMQ, , . PDF .


@Service
class BillingService {

    @Autowired
    private RabbitTemplate rabbitTemplate;

     public void bill(User user, Plan plan) {
        Invoice invoice = createInvoice(user, plan);
        // converts the invoice to,for example, json and uses it as the message's body
        rabbitTemplate.convertAndSend(exchange, routingkey, invoice);
        // ...
    }
}

, OK ERROR, HTTP-. :


  1. ? ? ( -).
  2. ? ? ( ).
  3. : ┬л / ┬╗ ┬л ?┬╗ ( -).

, . , , . :


  • JMS, ActiveMQ, (XA) .
  • RabbitMQ, , , , .
  • - , , ActiveMQ RabbitMQ , Docker.

Java- ?


-, , Spring Boot, .jar, -, Tomcat Jetty, . .


, , , Kubernetes GraalVM, .


: Quarkus, Micronaut, Vert.x, Helidon.


, , , , :


Spring Boot, , , , , Spring Boot .


, , , , , , - , , 50 .


, , , () ┬л ┬╗ , , , , .


.


:


  • ORM .
  • .
  • , ( , Hibernate), .

(, , , DevOps, ) , hello world. , , , JRebel DCEVM.


(Simon Brown): ( ) , ( ) тАФ .


, .


REST Java?


HTTP REST API. , , HTTP:


Http Java ( Java 11), Http Apache OkHttp.


, ┬л┬╗, , JAX-RS WebSocket.


, HTTP-, HTTP- . OpenFeign .


Java?


, , , ActiveMQ (Classic Artemis), RabbitMQ Kafka. , .


:


  • ActiveMQ RabbitMQ , . .
  • ActiveMQ ( ), RabbitMQ / Docker / TestContainer.
  • Kafka . , ┬л┬╗ ( ), .

, RabbitMQ ( ) Kafka, Pivotal .


, , . , - , RabbitMQ ActiveMQ.


, RabbitMQ , 20-30K . Kafka 100K . , , .


: Alibaba Group, , ( ) . , тАФ 99% - Java.


.


?


Spring ( Spring) - Arquillian ( JavaEE).


Docker Testcontainers, , , Oracle , .


HTTP-, Wiremock. (ActiveMQ) (RabbitMQ), Awaitility DSL.


, ┬л┬╗, Junit, TestNG AssertJ Mockito.


, , , , .


Java?


тАФ . , , less grep, n тАФ , .


. , ┬л ┬╗ .


:



?


, , IPS. . , [ip = 192.168.200.1] , [ip = 192.168.200.2], .


:


  • application.properties , , .
  • (, Amazon EC2 IP-, - ┬л┬╗ ), , , , , ┬л┬╗ , IP .
  • , , , : , , , , ? , ? ?

, , .


, Eureka Zookeeper, ┬л┬╗ , , , , . , .


, - ZooKeeper.


Java?


, . , HTTPS Oauth2 .


, ?


, , . Docker / Testcontainers, / Ansible.


.


: Yaml


, Yaml. , ┬л ┬╗. , Ansible, Kubernetes.


┬л┬╗ YAML, Ansible , , , IDE. , .


Yaml:
  - is:
    - so
    - great

? ? ?


, . , .



Java, , . , .



, , . ?


, - . - n .


, - Java-IoT. , , . ..


, , , , ┬л ┬╗. , - domain driven design , , ┬л ┬╗ , , , .


n ( ) ┬л ┬╗ , .



( (!)) , :


. 10 , , , . .


. .



, , :


, () , , . (.. ).


, .



, 20 ( ) 20 . , - 400 Hibernate .


: , .


, , , .


: Java- , , .



, , (, , ), , .


, , :


@Controller
class LoginController {

    // ...

    @PostMapping("/login")
    public boolean login(String username, String password) {
        User user = userDao.findByUserName(username);
        if (user == null) {
            // handle non existing user case
            return false;
        }
        if (!user.getPassword().equals(hashed(password))) {
            // handle wrong password case
            return false;
        }
        // 'Yay, Logged in!';
        // set some cookies, do whatever you want
        return true;
    }
}

(, , ): , ┬л┬╗ UserStateChanged тАФ - -.


Java , UserStateChanged Erlang. - - , Steve Yegge , , Google.


, , - .


? .


, .



, , , , [95: login-101: updateUserProfile].


, , , - тАФ .


, , .



: . , , , : , .


тДЦ 47?


? ?


?


Erlang , ?


, ! ?


, , DevOps, , , , . , .



, , . тАФ , .



Java- тАФ . тАФ - Maven . .


, , Maven, .



, DevOps (, Ansible Heroku ), .


Java . . , - ( ), .


Siva Prasad Reddy ( ) :


, , 70% 30% -.

Java?


, , Google . , , -, , .



, Java, Hetzner. , Hetzner.


, Java- , , , (<10).



рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдкрдХреЗ рдЬрд╛рд╡рд╛ рдореЛрдиреЛрд▓рд┐рде (рдХрдиреЗрдХреНрд╢рди рдкреВрд▓) рдХрд┐рддрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?


рдХреНрдпреЛрдВ? рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд┐рддрдиреЗ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рд▓рдЧрднрдЧ) рдЖрдкрдХреЗ рдореЛрдиреЛрд▓рд┐рде рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?


рдЙрддреНрддрд░


рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЕрдкрдиреЗ рдЬрд╡рд╛рдм рдЫреЛрдбрд╝ рджреЗрдВред рдореИрдВ рд╕рднреА рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВред


рдЕрдм рдЕрдкрдиреА рдкрд╕рдВрдж рдЦреБрдж рдмрдирд╛рдУ


рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдпрд╣рд╛рдБ рдореЗрд░реЗ рд╕рд╛рде рд╣реИрдВ: рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!


All Articles