JJUG CCC 2018 Spring participation memo

Technology that supports Japan's largest job search engine "Standby"

https://speakerdeck.com/marevol/ri-ben-zui-da-ji-falseqiu-ren-jian-suo-enzin-sutanbai-wozhi-eruji-shu

About the standby search function

--Standby: Search for more than 8 million different job listings at once --The search server is an Elasticsearch cluster (+ plugin)

Standby index and query

--Proper scoring and avoiding omissions

Search issues and responses

--Index backup

Machine learning

--Job type / industry estimation

from now on

--Increase / decrease in the number of nodes by auto scaling --Search result optimization by Learning To Rank --Applications such as Word2Vec

Q & A

――What is your evaluation of Query Turing?

Java10 summary and what happens to Java11

https://www.slideshare.net/nowokay/java10-and-11

support

--There is no longer any talk about the version of the year and month, and the major version is incremented as before. --Maintenance Release goes up revision (10.0.1 in April, 10.0.2 in July), minor version is always 0 --JDK 11 LTS for 2018/9 (LTS is added to the version name) --Java SE 8 support has been extended until 2019/1 (3 months after JDK11 release), individual users will support until 2020/12 --JDK 11 or later

JDK10 --The most flashy change is Local-Variable Type Inferences

JDK11

Support

##I want to have a microservices architecture even with old frameworks https://docs.google.com/presentation/d/1OZFgxuJQacfTc-3SY-ldxEE4OM3KUaUocdwIdkmy1z8/edit#slide=id.g3b5fd37ef4_0_83

-I want to put old services into microservices +Reduce the operational load (put it on a common platform) +Divide the service to make replacement easier

Spring Cloud Config

Spring Cloud Stream(Apahce Kafka)

-I want to add post-processing to a process with an old service +push notification, email sending function +I do not want to write the same processing that is used in other services, common processing for each service +Modules will need to fit into the form available in older services +I want it to be executed asynchronously -Use Apache Kafka (1 Source, 2 Sink) -Topic design +Example: Push notification after a function +Make "what you did" Tipic, eg) Like / Follow / Post ("Push YYY to XXX"Do not make Topic) -How to change the message content +It's better to create a new Topic +Since the Source side starts sending messages to the new Topic, the Sink side refers to the new Topic.

##An example of using gRPC in an advertising bidding system that handles 160,000 requests per second from Logicad https://www.slideshare.net/hiroiso/logicad16grpc

gRPC

-Candidates for selection +Redis: Throughput is affected (blocked) because it operates in a single thread. +Aerospike: Data is sharded and affects latency (multiple communications occur, multithreading increases thread connections)

###Results of actually applying gRPC -benchmark +Stress test of the advertising product information server alone (maximum throughput, measurement of changes in the number of connections) +Measurement of latency and throughput in a load test environment (a series of bid processing) -It is possible to apply load using JMeter even with gRPC +It is possible to prepare a class that implements JavaSamplerClient and request any protocol. -Load test

##The story of making a server application with DDD and clean architecture -Rush construction does not work +The outline of the specification has been decided, some of the core functions had parts, so I want to see what works using them as soon as possible +Prototyping proceeded while creating functional specifications +It was pushed a lot and the prototype was about to become a production code ⇒ Could not be released -Various reflections +Download all clients from the server and process (abnormal traffic volume, increased client processing load) +Reflection of specification changes of external cooperation destination is reflected in all components +There is no main component of business logic, and each component cannot concentrate on core logic and bears the conversion process.

###design -Design order +Define elevator pitch +Define functional specifications and usage scenarios (also define non-functional requirements) +Robustness analysis +Bounded context extraction +Creating a context map -Robustness analysis +Create use case scenarios in advance +Think about how to create a function that meets the scenario +Express it with boundaries (screens, cron), entities (data to manage), controls (processing, user authentication, value acquisition, etc.) +Handwritten, written and erased in a notebook, and adopted the one who seems to be good for analysis by two people -Context map +For the functions that appear in the robustness diagram, collect similar ones and define a "bounded context". +Write → fix → write → fix +Carefully judged the relationships between contexts (partnerships, customers)/Supplier, adaptor) -Ubiquitous language +Establish unique terms for each context +As a system, it is easier to understand if the terms are unified between contexts, and the same term is not used in different contexts with different meanings. +We also decided to name it on the program → This is popular

###Things to prepare before implementation -rule +Git repository operation, coding standard, package configuration, Rest API standard, log level +The exception is defined in the class near where it occurred -Source code review perspective +Is it possible for another person to maintain it, is it expandable in the future, is there no waste, is the range of influence too wide? ⇒ Described in the Wiki +Safety (rewriting instance variables of Autowired class, is cache expire taken into account?) -Architecture in each context

###Architecture in each context -Interface layer

###What I found after implementing it -You can focus on your interests

Recommended Posts

JJUG CCC 2018 Spring participation memo
JJUG CCC Spring 2018 memo
JJUG CCC 2018 Spring Repo
I went to JJUG CCC 2019 Spring
I participated in JJUG CCC 2019 Spring
Spring retrospective memo
Summary of going to JJUG CCC 2019 Spring
[* Java *] I participated in JJUG CCC 2019 Spring
[Memo] JJUG Night Seminar
Spring Shell usage memo
Spring boot memo writing (1)
JJUG CCC 2018 Fall Repo
Spring boot memo writing (2)
JJUG CCC Fall 2018 document summary
Spring Security usage memo CSRF
Spring Framework self-study memo series_1
Spring Security usage memo Run-As
Spring Security Usage memo Method security
Spring Security usage memo Remember-Me
JJUG CCC 2019 Fall slide list
JJUG CCC 2017 Fall Report Java
Participated in JJUG CCC 2019 FALL
JJUG CCC 2019 Fall materials summarized
Impressions of an engineer apprentice going to JJUG CCC 2018 Spring
Spring Security usage memo CORS
Spring Security usage memo test
Spring boot controller method memo
Spring Security usage memo Authentication / authorization
◆ Spring Boot + gradle environment construction memo
spring framework Simple study memo (2): AOP
Spring Security usage memo response header
Memo after the first Spring project-MVC-
I participated in JJUG CCC 2019 fall
Spring Security usage memo session management
Spring Security usage memo Basic / mechanism
A memo that touched Spring Boot
Spring thorough introduction version upgrade memo
Memo after the first Spring project-Database-
I participated in JJUG CCC 2019 Fall.