SlideShare a Scribd company logo
1 of 199
Download to read offline
Spring Cloud Internals
Service Discovery
About me
Architect @
/aatarasoff
/aatarasoff
habrahabr.ru/aatarasoff
developerblog.info
2
Agenda
Today
1. New reality - new problems
2. What service discovery means?
3. Dive into Spring Cloud service
discovery pattern implementation
4. Tips and tricks during the session
5. Own experience as a conclusion
3
What is the problem?
4
Database
ESB (service layer)
Service Service Service Service
Hardware Load Balancer
Alfa-Click 2.0
(JSF/Weblogic)
5
Big App
Static resource
Database
Remote EJB
6
Simple
Binding
Small number of resources
Static host and port binding
Rare reconfiguration
7
insert into resources_table values (key, endpoint)
8
final Properties props = new Properties();
final Context context = new InitialContext(props);
// lookup
Foo bean = context.lookup("ejb:myejb//Foo!org.myapp.Foo");
bean.call();
9
final Properties props = new Properties();
final Context context = new InitialContext(props);
// lookup
Foo bean = context.lookup("ejb:myejb//Foo!org.myapp.Foo");
//do something
bean.call();
10
Big Frontend App
11
Big Frontend App
Small App
Small App
Small App
12
Small App
UI
API 1
API 2
13
ESB Services
API 1
API 2
API 4
UIMobile
Mongo DB
14
API
API instance
API instance
API instance
15
Some API
Another API
Instance 1
Another API
Instance 2
Another API
Instance 3
?
16
- hosts: dc1-rest-api
roles:
- { role: api, name: transactions-api, service_port: 9081 }
- { role: api, name: cards-api, port: 8081 }
- { role: api, name: customers-api, port: 9091 }
dc1-rest-api
<ip_address_1>
<ip_address_2>
...
Static Configuration
17
{
"id": "/retail-online-bank/middle/transactions-api",
"cpus": 1,
"mem": 1024,
"instances": 5,
"container": {
"docker": {
"image": "docker/retail-online-bank-transactions-api:1.17.0",
"portMappings": [
{
"containerPort": 8080,
"servicePort": 0
}
]
}
}
}
Dynamic Configuration (PAAS)
18
Service
Discovery
What instance we can call?
19
20
Remote API Calls
21
Five parallel service calls
22
S1 S2 S3 S4 S5
23
Client
call
S1 S2 S3 S4 S5
24
Client
call
S1 S2 S3 S4 S5
25
Five parallel service calls
26
p = 0.99
p – the probability of success for one service
27
P = p5 = (0.99)5 ≈ 0.95
p – the probability of success for one service
28
Service
Discovery
What instance we can call?
What instance is better for call?
29
Service
Discovery
What instance we can call?
What instance is better for call?
How we can increase probability of
success for one call?
30
S1 S2 S3 S4 S5
31
STATE
S1 S2 S3 S4 S5
S1 S2 S3 S4 S5
32
STATE
FILTER
S1 S2 S3
S1 S2 S3 S4 S5
S1 S2 S3 S4 S5
33
STATE
FILTER
S2 S4
Other DC
S1 S2 S3 S4 S5
S1 S2 S3 S4 S5
34
STATE
FILTER
S2 S4
Other DC
S1 S2 S3 S4 S5
S1 S2 S3 S4 S5
?
35
Service Service Service Service Service
STATE
FILTER
S2 S4
RULE
S2
S1 S2 S3 S4 S5
S1 S2 S3 S4 S5
36
Service Service Service Service Service
STATE
FILTER
S2 S4
RULE
S2
Client
S1 S2 S3 S4 S5
call
S1 S2 S3 S4 S5
37
Client-Side Service Discovery
38
Server-Side Service Discovery
39
Server-Side Client-Side
VS
Dummy client
Language/Library tolerance
Single Responsibility Principle
More complex and smart
decision implementation
Avoid point of failure
Flexibility
Hard to implement something
complex and smart
One more point of failure
Very good implementation is
required
Lock on libraries
Hard to make changes
40
Spring
Cloud
Tools for building common patterns
in distributed systems
Part of Spring Boot
Implements Client-Side Service
Discovery Pattern
41
Rollback
42
S1 S2 S3 S4 S5
?
How we get them all?
43
Service
Registry?
Database
Properties File
Environment Variables
44
Service
Registry?
Database
Properties File
Environment Variables
45
Service
Registry
Netflix Eureka
Consul
etcd
Zookeeper
…
46
Leader
Master Master
Leader-Election
Quorum (n + 1)/2
Distributed Locks
47
Peer
Peer Peer
Eureka is not the same
48
Client/Slave
Leader
Master Master
Client/Slave Client/Slave
horizontal scaling
49
Service A
Leader
Master Master
Service B Service C
register
50
Service A
Leader
Master Master
Service B Service C
health check
51
Service A
Leader
Master Master
Service B Service C
heartbeat
52
Service A
Leader
Master Master
Service B Service C
health check
53
Service A
Leader
Master Master
Service B Service C
health check
54
Service A
Leader
Master Master
Service B Service C
deregister
55
Service A
Leader
Master Master
Service B Service C
deregister
graceful shutdown
56
Spring Cloud Core
Eureka Consul Marathon
57
Spring Cloud Core
Eureka Consul Marathon
Reference/Native implementation
Most complex load balancing
58
Spring Cloud Core
Eureka Consul Marathon
Out of the box PaaS
59
60
61
{
"host": "server1",
"ports": [
20688
],
"ipAddresses": [
{
"ipAddress": "172.17.0.21",
"protocol": "IPv4"
}
],
"appId": "/retail-online-bank/middle/a2a-transactions-api",
"healthCheckResults": [
{
"alive": true
}
]
}
Spring Cloud Core
Eureka Consul Marathon
Out of the box PaaS
One tool for deployment and
configuration storage
Own library
62
Deep
Dive
1. Discovery
63
...
@EnableDiscoveryClient
...
public class Application {
@Autowired
private DiscoveryClient discoveryClient;
public List<String> services() {
return discoveryClient.getServices();
}
}
64
...
@EnableDiscoveryClient
...
public class Application {
@Autowired
private DiscoveryClient discoveryClient;
public List<String> services() {
return discoveryClient.getServices();
}
}
65
public interface DiscoveryClient {
public ServiceInstance getLocalServiceInstance();
public List<ServiceInstance> getInstances(String serviceId);
public List<String> getServices();
}
66
public interface DiscoveryClient {
public ServiceInstance getLocalServiceInstance();
public List<ServiceInstance> getInstances(String serviceId);
public List<String> getServices();
}
67
public interface DiscoveryClient {
public ServiceInstance getLocalServiceInstance();
public List<ServiceInstance> getInstances(String serviceId);
public List<String> getServices();
}
68
Eureka
Implementation
69
Eureka Cluster (Zone 1)
appname: app1
virtualHostName: app
eureka:
client:
serviceUrl:
defaultZone: ${ZONE1_EUREKA_URL}
Eureka Cluster (Zone 2)
appname: app2
virtualHostName: app
serviceId -> virtualHostName
70
Eureka Cluster (Zone 1)
appname: app1
virtualHostName: app
eureka:
client:
serviceUrl:
defaultZone: ${ZONE1_EUREKA_URL}
zone2: ${ZONE2_EUREKA_URL}
availabilityZones: zone1,zone2
Eureka Cluster (Zone 2)
appname: app2
virtualHostName: app
71
EurekaClientEurekaDiscoveryClient
serviceId
72
virtualHostName
Applications
EurekaClientEurekaDiscoveryClient
serviceId
73
Eureka Cluster (Zone 1)
appname: app1
virtualHostName: app
virtualHostName
Applications
EurekaClient
fetch
EurekaDiscoveryClient
serviceId
eureka:
client:
registryFetchIntervalSeconds: 5 (30)
74
Eureka Cluster (Zone 1)
appname: app1
virtualHostName: app
virtualHostName
Applications
EurekaClient
fetch and filter
EurekaDiscoveryClient
serviceId
eureka:
client:
registryFetchIntervalSeconds: 5 (30)
filterOnlyUpInstances: true (true)
75
Marathon
Implementation
76
Mesos Cluster (DC 1)
taskId: {random}
appId: app1
spring:
cloud:
marathon:
host: ${MARATHON_HOST}
port: ${MARATHON_PORT}
Mesos Cluster (DC 2)
taskId: {random}
appId: app1
serviceId -> appId
77
Mesos Cluster (DC 1)
taskId: {random}
appId: app1
spring:
cloud:
marathon:
host: ${MARATHON_HOST}
port: ${MARATHON_PORT}
Mesos Cluster (DC 2)
taskId: {random}
appId: app1
serviceId -> appId
<- - - - there is no failover to another dc
78
Mesos Cluster (DC 1)
taskId: {random}
appId: app1
task = instance
MarathonClient
fetch tasks for apps
MarathonDiscoveryClient
serviceId
spring:
cloud:
marathon:
<no app cache>
<no property> only healthy tasks
79
Is it success?
80
@Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("/instance")
public ServiceInstance instance() {
return loadBalancer.choose(serviceId);
}
81
@Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("/instance")
public ServiceInstance instance() {
return loadBalancer.choose(serviceId);
}
?
82
@Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("/instance")
public ServiceInstance instance() {
return loadBalancer.choose(serviceId);
}
83
1. ServiceInstance 2. null 3. Error
@Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("/instance")
public ServiceInstance instance() {
return loadBalancer.choose(serviceId);
}
84
1. ServiceInstance 2. null 3. Error
Where it is
used?
Hypermedia Links
Dynamic Routes for Edge Server
DiscoveryClient health check in
actuator is based on it
Less than you expect, right?
85
Deep
Dive
1. Discovery
2. Balance it
86
Load Balancer
Client
Based on Netflix Ribbon
Ribbon may be used with or without
service registry
87
Service Service Service Service Service
STATE
FILTER
S2 S4
RULE
S2
Client
S1 S2 S3 S4 S5
call
S1 S2 S3 S4 S5
88
Service Service Service Service Service
FILTER
S2 S4
RULE
S2
Client
S1 S2 S3 S4 S5
call
S1 S2 S3 S4 S5
Server List
89
Service Service Service Service Service
S2 S4
RULE
S2
Client
S1 S2 S3 S4 S5
call
S1 S2 S3 S4 S5
Server List
Filter Chain
90
Service Service Service Service Service
S2 S4
S2
LoadBalancerClient
S1 S2 S3 S4 S5
call
S1 S2 S3 S4 S5
Server List
Filter Chain
Rule
91
Ribbon
Server List
Static
Configuration Based
Discovery Based
92
Spring Cloud
Ribbon Configure
Bean Lifecycle
Spring native configuration
93
test-service: #service name
ribbon: #namespace
listOfServers: host:8080,anotherHost:8081
ConfigurationBasedServerList
94
test-service: #service name
ribbon: #namespace
listOfServers: host:8080,anotherHost:8081
public List<Server> getListOfServers() {
return derive(
clientConfig.get(CommonClientConfigKey.ListOfServers)
);
}
ConfigurationBasedServerList
95
@Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("/url")
public String realUrl() throws IOException {
return loadBalancer.reconstructURI(
instance,
new URI("http://"+ serviceId +"/me")
).toString();
}
it will be replaced with real host and port
96
@Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("/url")
public String realUrl() throws IOException {
return loadBalancer.reconstructURI(
instance,
new URI("http://"+ serviceId +"/me")
).toString();
}
> curl service:8080/url
http://host:8080/me
97
@Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("/url")
public String realUrl() throws IOException {
return loadBalancer.reconstructURI(
instance,
new URI("http://"+ serviceId +"/me")
).toString();
}
> curl service:8080/url
http://anotherHost:8080/me
98
Copy-past
Implementation
99
Same as DiscoveryClient
Is our instance
alive?
100
S1 S2 S3 S4 S5
S2 S4
S2
LoadBalancerClient
call
S1 S2 S3 S4 S5?
101
Server List
Filter Chain
Rule
t t + 1
S1
S2
S3
102
t t + 1
S1
S2
S3
ServerList
S1
S2
S3
103
t t + 1
S1
S2
S3
ServerList
S1S1
S2
S3
104
t t + 1
S1
S2
S3
ServerList
S1 S1S1
S2
S3
105
t t + 1
S1
S2
S3
ServerList
S1 S1
t + 2
S1
S2
S3
106
S1 S2 S3 S4 S5
S2 S4
S2
LoadBalancerClient
call
S1 S2 S3 S4 S5Ping ->
107
Server List
Filter Chain
Rule
Pinger
(background thread)
LoadBalancer
background task
force if setServerList() is called
108
Pinger
(background thread)
LoadBalancer
background task
force if setServerList() is called
IPingStrategy
pingServers
109
Pinger
(background thread)
LoadBalancer
background task
force if setServerList() is called
IPingStrategy
pingServers
isAlive(server)
IPing
110
IPingStrategy SerialPingStrategy
int numCandidates = servers.length;
boolean[] results = new boolean[numCandidates];
for (int i = 0; i < numCandidates; i++) {
results[i] = false; /* Default answer is DEAD. */
if (ping != null) {
results[i] = ping.isAlive(servers[i]);
}
}
return results;
And what if ping will take a long time?
111
NIWSDiscoveryPing
(Eureka)
IPing
instance.status.equals(
InstanceStatus.UP
)
ConsulPing
(Consul)
MarathonPing
(Marathon)
server.isPassingChecks()
server.isPassingChecks()
All are fake pings
112
public class MarathonPing implements IPing {
@Override
public boolean isAlive(Server server) {
return server.isHealthChecksPassing();
}
}
113
public class MarathonPing implements IPing {
@Override
public boolean isAlive(Server server) {
return server.isHealthChecksPassing();
}
}
public class MarathonServer extends Server {
public boolean isHealthChecksPassing() {
return healthChecks.parallelStream()
.allMatch(HealthCheckResult::isAlive);
}
}
114
IPingStrategy ?
You may implement your own strategy at your own risk
IPing PingUrl
public boolean isAlive(Server server) {
URL url = constructUrl(server);
HttpResponse response = httpClient.execute(createReq(url));
return response.getStatusLine().getStatusCode() == 200;
}
115
Reduce fetch interval
116
S1 S2 S3 S4 S5
S2 S4
S2
LoadBalancerClient
call
S1 S2 S3 S4 S5
Server List
Filter Chain ->
Rule
117
Eureka Cluster (Zone 1)
S1
S2
S3
Eureka Cluster (Zone 2)
S4
S5
S6
Client
(Zone 1)
118
Eureka Cluster (Zone 1)
S1
S2
S3
Eureka Cluster (Zone 2)
S4
S5
S6
Client
(Zone 1)
cheap call
119
Eureka Cluster (Zone 1)
S1
S2
S3
Eureka Cluster (Zone 2)
S4
S5
S6
Client
(Zone 1)
expensive call
120
Eureka Cluster (Zone 1)
S2
S3
Eureka Cluster (Zone 2)
S4
S5
S6
Client
(Zone 1)
unpredictable
S1
121
Eureka Cluster (Zone 1)
S1
S2
S3
Eureka Cluster (Zone 2)
S4
S5
S6
Client
(Zone 1)
more guaranteed result
122
FilterZonePreferenceFilter
List servers = super.getFilteredServers();
List local = servers.filter(server ->
server.zone == zoneFromConfig
);
if (!local.isEmpty()) {
return local;
}
return servers;
super.getFilteredServers()
DynamicServerListLoadBalancer
default (local) zone
123
ZoneAffinityFilterZonePreferenceFilter
super.getFilteredServers(servers)
LoadBalancerStats
getZoneSnaphot(servers)
124
S1 S2 S3 S4 S5
S2 S4
S2
LoadBalancerClient
call
S1 S2 S3 S4 S5LB Stats ->
Server List
Filter Chain
Rule
125
S1 S2 S3 S4 S5
S2 S4
S2
LoadBalancerClient
call
S1 S2 S3 S4 S5LB Stats ->
Server Stats
Server List
Filter Chain
Rule
126
S1
S2
S3
Zone Snapshot
Server Stats
127
S1
S2
S3
Zone Snapshot
activeConnections
activeServers
circuitBreakerTrippedCount
128
ZoneAffinityFilterZonePreferenceFilter
super.getFilteredServers(servers)
LoadBalancerStats
enableZoneAffinity?
zoneAffinity:
maxLoadPerServer: 0.6
maxBlackOutServersPercentage: 0.8
minAvailableServers: 2
129
ZoneAffinityFilterZonePreferenceFilter
super.getFilteredServers(servers)
ZoneAffinityPredicate
filter out instances
from other zones
130
zoneAffinity:
maxLoadPerServer: 0.6
maxBlackOutServersPercentage: 0.8
minAvailableServers: 2
Eureka Cluster (Zone 1)
S1
S2
S3
Eureka Cluster (Zone 2)
S4
S5
S6
Client
(Zone 1)
cheap call
131
ZoneAffinityFilterZonePreferenceFilter
super.getFilteredServers(servers)
ZoneAffinityPredicate
no filter
132
zoneAffinity:
maxLoadPerServer: 0.6
maxBlackOutServersPercentage: 0.8
minAvailableServers: 2
Eureka Cluster (Zone 1)
S1
Eureka Cluster (Zone 2)
S4
S5
S6
Client
(Zone 1)
133
S2
S3
Use Eureka. Use zones
134
Define your
rules
135
S1 S2 S3 S4 S5
S2 S4
S2
LoadBalancerClient
call
S1 S2 S3 S4 S5
?
136
Server List
Filter Chain
Rule
IRule
RoundRobin
ZoneAvoidance
default
Weighted Random
BestAvailability AvailabilityFilter
137
IRule
RoundRobin
ZoneAvoidance
Weighted Random
BestAvailability AvailabilityFiltering
138
upstream test-marathon-app {
server host1 weight=3;
server host2 weight=1;
server host3 weight=1;
}
Weighted typically is predefined
139
Weight Task
(background thread)
Weighted Rule
background task
LoadBalancerStats
calculate
serverWeight = summ(avgServerResponseTime)- avgServerResponseTime
140
Weight Task
(background thread)
Weighted Rule
background task
LoadBalancerStats
calculate
serverWeight = summ(avgServerResponseTime)- avgServerResponseTime
141
More response time -> less weight
142
Slow Instance Fast Instance
100 ms 10 ms
143
Slow Instance Fast Instance
100 ms 10 ms5 000 requests
144
Slow Instance Fast Instance
100 ms 10 ms5 000 requests
Round Robin Rule
Slow: 2500 and Fast: 2500
Average time: 70
145
Slow Instance Fast Instance
100 ms 10 ms5 000 requests
Round Robin Rule
Slow: 2500 and Fast: 2500
Average time: 70
146
Slow Instance Fast Instance
100 ms 10 ms5 000 requests
Round Robin Rule
Slow: 2500 and Fast: 2500
Average time: 70
Weighted Rule
Slow: 634 and Fast: 4366
Average time: 27
147
Slow Instance Fast Instance
100 ms 10 ms1 000 requests
Round Robin Rule
Slow: 500 and Fast: 500
Average time: 70
Weighted Rule
?
?
148
Slow Instance Fast Instance
100 ms 10 ms1 000 requests
Round Robin Rule
Slow: 500 and Fast: 500
Average time: 70
Weighted Rule
Slow: 500 and Fast: 500
Average time: 72
149
Slow Instance Fast Instance
100 ms 10 ms1 000 requests
Round Robin Rule
Slow: 500 and Fast: 500
Average time: 70
Weighted Rule
Slow: 500 and Fast: 500
Average time: 72
test-service: #service name
ribbon: #namespace
ServerWeightTaskTimerInterval: 30000 #ms
Let’s explain
150
test-service: #service name
ribbon: #namespace
ServerWeightTaskTimerInterval: 30000 #ms
Weigths [0.0, 0.0]
Let’s explain
151
test-service: #service name
ribbon: #namespace
ServerWeightTaskTimerInterval: 1000 #ms
Let’s explain
152
test-service: #service name
ribbon: #namespace
ServerWeightTaskTimerInterval: 1000 #ms
Weigths [12.285123016785462, 120.30885719400065]
Let’s explain
153
IRule
RoundRobin
ZoneAvoidance
Weighted Random
BestAvailability AvailabilityFiltering
154
Best Available Rule LoadBalancerStats
calculate
chosen -> activeConnections == min(activeConnections)
155
Best Available Rule LoadBalancerStats
calculate
chosen -> activeConnections == min(activeConnections)
156
Less active connections -> more chance to success
157
Slow Instance Fast Instance
100 ms 10 ms1 000 requests
Round Robin Rule
Slow: 500 and Fast: 500
Average time: 70
Weighted Rule
Slow: 500 and Fast: 500
Average time: 72
Best Available Rule
Slow: 152 and Fast: 847
Average time: 38
Don’t use round robin rule
158
IRule
RoundRobin
ZoneAvoidance
Weighted Random
BestAvailability AvailabilityFiltering
159
Availability Filtering
Rule
LoadBalancerStats
calculate
filtered -> activeConnections < maxActiveConnections
filtered -> !isCircuitBreakerTripped
Availability Predicate
filter
160
Like a round robin
IRule
RoundRobin
ZoneAvoidance
Weighted Random
BestAvailability AvailabilityFiltering
161
Zone Avoidance Rule Composite Predicate
filter
Zone Predicate Availability Predicate
162
Zone Avoidance Rule Composite Predicate
filter
Zone Predicate Availability Predicate
CompositePredicateBuilder
int minimalFilteredServers = 1
float minimalFilteredPercentage = 0
predicate.filter(servers)
163
Zone Avoidance Rule Composite Predicate
filter
Zone Predicate Availability Predicate
CompositePredicateBuilder
int minimalFilteredServers = 1
float minimalFilteredPercentage = 0
int count = predicate.filter(servers).size() //2
164
Zone Avoidance Rule Composite Predicate
filter
Zone Predicate Availability Predicate
CompositePredicateBuilder
int minimalFilteredServers = 1
float minimalFilteredPercentage = 0
int count = predicate.filter(servers).size() //2
count >= minimalFilteredServers
count >= minimalFilteredPercentage * count
165
Zone Avoidance Rule Composite Predicate
filter
Zone Predicate Availability Predicate
CompositePredicateBuilder
int minimalFilteredServers = 1
float minimalFilteredPercentage = 0
int count = predicate.filter(servers).size() //0
count >= minimalFilteredServers
count >= minimalFilteredPercentage * count
166
Zone Avoidance Rule Composite Predicate
filter
Zone Predicate Availability Predicate
next
167
triggeringLoadPerServerThreshold: 0.2
avoidZoneWithBlackoutPercetage: 0.99999d
worstZone -> loadPerServer > max(loadPerServer) &&
loadPerServer > triggeringLoadPerServerThreshold
zones.remove(worstZone)
Zone Avoidance Rule Composite Predicate
filter
Zone Predicate Availability Predicate
168
triggeringLoadPerServerThreshold: 0.2
avoidZoneWithBlackoutPercetage: 0.99999d
zoneToAvoid -> circuitBreakerTrippedCount / instanceCount >=
avoidZoneWithBlackoutPercetage
zones.remove(zoneToAvoid)
Zone Avoidance Rule Composite Predicate
filter
Zone Predicate Availability Predicate
169
IRule
RoundRobin
ZoneAvoidance
Weighted Random
BestAvailability AvailabilityFiltering
170
If you don’t use zones
then don’t use default rule
171
Deep
Dive
1. Discovery
2. Balance it
3. Lifecycle
172
Service Service Service Service Service
S2 S4
S2
LoadBalancerClient
S1 S2 S3 S4 S5
S1 S2 S3 S4 S5
New Service
register/deregister
173
How to
do it?
3rd party registration pattern
- dynamic
- static
Self-registration pattern (Lifecycle)
174
Docker Engine
175
Docker Engine
Service
register/deregister
176
Docker Engine
Service
register/deregister
177
Registrator
emit event
Docker Engine
Service
register/deregister
178
Registrator
emit event
Service Registry
native event
What is
lifecycle?
Allow automatically register and
deregister service in service registry
Implements Spring Lifecycle
interface
179
SmartLifecycle
DiscoveryLifecycle EurekaDiscoveryClientConfiguration
ConsulLifecycle
180
DiscoveryLifecycle
LifecycleProcessor
autoStartup on refresh
startBeans on start
Service Registry
register
emit InstanceRegistered
Event
DiscoveryClientHealthIndicator
181
DiscoveryLifecycle
LifecycleProcessor
on RefreshScope event
stopBeans on stop
Service Registry
deregister
close or shutdown
Real service discovery client
182
Something about docker
183
Docker container
Internal IP External IP
184
> ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en1: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
en2: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
185
> ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en1: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
en2: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
?
186
> ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en1: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
en2: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
Low index
187
Docker container
Internal IP External IP
188
spring:
cloud:
consul:
discovery:
lifecycle:
enabled: false
189
Registrator
spring:
cloud:
inetutils:
ignored-interfaces:
- vbox*
- bridge*
- lo*
190
spring:
cloud:
inetutils:
ignored-interfaces:
- vbox*
- bridge*
- lo*
191
spring:
cloud:
inetutils:
ignored-interfaces:
- vbox*
- bridge*
- lo*
consul:
discovery:
preferIpAddress: true (false)
192
Instead of a conclusion
193
Own
experience
194
Own
experience
195
We use both patterns: server and
client side
• Consul + Registrator + Nginx
• Marathon + MarathonLB
• Eureka
Own
experience
Use client side pattern for API and
Edge server
Use server side for NodeJS front
apps and non-standard API (Python)
196
Own
experience
Spring Cloud is production-ready and
very customizable
Minimum number of settings are
needed to be changed, but for better
results there are some of them that
should be changed
There are some issues that make
you sad
197
198
Spring Cloud Marathon (Proof of Concept)
https://github.com/aatarasoff/spring-cloud-marathon
Spring Cloud
http://projects.spring.io/spring-cloud
Service Discovery Patterns
http://microservices.io/patterns/server-side-discovery.html
http://microservices.io/patterns/client-side-discovery.html
/aatarasoff
/aatarasoff
habrahabr.ru/aatarasoff
developerblog.info
Questions and Answers
Architect @
199

More Related Content

What's hot

Spring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFuSpring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFuVMware Tanzu
 
Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Roberto Franchini
 
Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012Anton Arhipov
 
Spring & Hibernate
Spring & HibernateSpring & Hibernate
Spring & HibernateJiayun Zhou
 
Bytecode manipulation with Javassist for fun and profit
Bytecode manipulation with Javassist for fun and profitBytecode manipulation with Javassist for fun and profit
Bytecode manipulation with Javassist for fun and profitJérôme Kehrli
 
Taking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the ExtremeTaking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the Extremeyinonavraham
 
Scala and Play with Gradle
Scala and Play with GradleScala and Play with Gradle
Scala and Play with GradleWei Chen
 
10thMeetup-20190420-REST API Design Principles 되새기기
10thMeetup-20190420-REST API Design Principles 되새기기10thMeetup-20190420-REST API Design Principles 되새기기
10thMeetup-20190420-REST API Design Principles 되새기기DongHee Lee
 
PVS-Studio in the Clouds: CircleCI
PVS-Studio in the Clouds: CircleCIPVS-Studio in the Clouds: CircleCI
PVS-Studio in the Clouds: CircleCIAndrey Karpov
 
Import golang; struct microservice
Import golang; struct microserviceImport golang; struct microservice
Import golang; struct microserviceGiulio De Donato
 
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPInria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPStéphanie Roger
 
OrientDB - The 2nd generation of (multi-model) NoSQL
OrientDB - The 2nd generation of  (multi-model) NoSQLOrientDB - The 2nd generation of  (multi-model) NoSQL
OrientDB - The 2nd generation of (multi-model) NoSQLRoberto Franchini
 
The world of gradle - an introduction for developers
The world of gradle  - an introduction for developersThe world of gradle  - an introduction for developers
The world of gradle - an introduction for developersTricode (part of Dept)
 
Евгений Жарков "React Native: Hurdle Race"
Евгений Жарков "React Native: Hurdle Race"Евгений Жарков "React Native: Hurdle Race"
Евгений Жарков "React Native: Hurdle Race"Fwdays
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbtFabio Fumarola
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with GradleRyan Cuprak
 

What's hot (20)

Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Spring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFuSpring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFu
 
Dropwizard
DropwizardDropwizard
Dropwizard
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
 
Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!
 
Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012
 
Spring & Hibernate
Spring & HibernateSpring & Hibernate
Spring & Hibernate
 
Bytecode manipulation with Javassist for fun and profit
Bytecode manipulation with Javassist for fun and profitBytecode manipulation with Javassist for fun and profit
Bytecode manipulation with Javassist for fun and profit
 
Taking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the ExtremeTaking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the Extreme
 
Scala and Play with Gradle
Scala and Play with GradleScala and Play with Gradle
Scala and Play with Gradle
 
GradleFX
GradleFXGradleFX
GradleFX
 
10thMeetup-20190420-REST API Design Principles 되새기기
10thMeetup-20190420-REST API Design Principles 되새기기10thMeetup-20190420-REST API Design Principles 되새기기
10thMeetup-20190420-REST API Design Principles 되새기기
 
PVS-Studio in the Clouds: CircleCI
PVS-Studio in the Clouds: CircleCIPVS-Studio in the Clouds: CircleCI
PVS-Studio in the Clouds: CircleCI
 
Import golang; struct microservice
Import golang; struct microserviceImport golang; struct microservice
Import golang; struct microservice
 
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPInria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
 
OrientDB - The 2nd generation of (multi-model) NoSQL
OrientDB - The 2nd generation of  (multi-model) NoSQLOrientDB - The 2nd generation of  (multi-model) NoSQL
OrientDB - The 2nd generation of (multi-model) NoSQL
 
The world of gradle - an introduction for developers
The world of gradle  - an introduction for developersThe world of gradle  - an introduction for developers
The world of gradle - an introduction for developers
 
Евгений Жарков "React Native: Hurdle Race"
Евгений Жарков "React Native: Hurdle Race"Евгений Жарков "React Native: Hurdle Race"
Евгений Жарков "React Native: Hurdle Race"
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 

Viewers also liked

Continuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedContinuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedAleksandr Tarasov
 
WILD microSERVICES v2 (JEEConf Edition)
WILD microSERVICES v2 (JEEConf Edition)WILD microSERVICES v2 (JEEConf Edition)
WILD microSERVICES v2 (JEEConf Edition)Aleksandr Tarasov
 
Joker 2015. WILD microSERVICES
Joker 2015. WILD microSERVICESJoker 2015. WILD microSERVICES
Joker 2015. WILD microSERVICESAleksandr Tarasov
 
Дикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургДикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургКирилл Толкачёв
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубыAleksandr Tarasov
 
Java Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real worldJava Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real worldКирилл Толкачёв
 
Declarative Services - Dependency Injection OSGi Style
Declarative Services - Dependency Injection OSGi StyleDeclarative Services - Dependency Injection OSGi Style
Declarative Services - Dependency Injection OSGi StyleFelix Meschberger
 
Server-side OSGi with Apache Sling (OSGiDevCon 2011)
Server-side OSGi with Apache Sling (OSGiDevCon 2011)Server-side OSGi with Apache Sling (OSGiDevCon 2011)
Server-side OSGi with Apache Sling (OSGiDevCon 2011)Felix Meschberger
 
Social Media For Busy Entrepreneurs and Small Businesses
Social Media For Busy Entrepreneurs and Small Businesses Social Media For Busy Entrepreneurs and Small Businesses
Social Media For Busy Entrepreneurs and Small Businesses Fikriyyah George
 
Crisis Subprime en España
Crisis Subprime en EspañaCrisis Subprime en España
Crisis Subprime en Españaespejodeoesed
 
Linux as a gaming platform - Errata
Linux as a gaming platform - ErrataLinux as a gaming platform - Errata
Linux as a gaming platform - ErrataLeszek Godlewski
 
CriminalEFS-PowerPoint
CriminalEFS-PowerPointCriminalEFS-PowerPoint
CriminalEFS-PowerPointJenn Amabile
 
Linux as a gaming platform, ideology aside
Linux as a gaming platform, ideology asideLinux as a gaming platform, ideology aside
Linux as a gaming platform, ideology asideLeszek Godlewski
 
El presidencialismo mexicano antes y después
El presidencialismo mexicano antes y después El presidencialismo mexicano antes y después
El presidencialismo mexicano antes y después espejodeoesed
 

Viewers also liked (20)

Continuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedContinuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons Learned
 
WILD microSERVICES v2 (JEEConf Edition)
WILD microSERVICES v2 (JEEConf Edition)WILD microSERVICES v2 (JEEConf Edition)
WILD microSERVICES v2 (JEEConf Edition)
 
Joker 2015. WILD microSERVICES
Joker 2015. WILD microSERVICESJoker 2015. WILD microSERVICES
Joker 2015. WILD microSERVICES
 
Дикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургДикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG Екатеринбург
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
 
Java Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real worldJava Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real world
 
Declarative Services - Dependency Injection OSGi Style
Declarative Services - Dependency Injection OSGi StyleDeclarative Services - Dependency Injection OSGi Style
Declarative Services - Dependency Injection OSGi Style
 
Reactive applications
Reactive applicationsReactive applications
Reactive applications
 
Server-side OSGi with Apache Sling (OSGiDevCon 2011)
Server-side OSGi with Apache Sling (OSGiDevCon 2011)Server-side OSGi with Apache Sling (OSGiDevCon 2011)
Server-side OSGi with Apache Sling (OSGiDevCon 2011)
 
Social Media For Busy Entrepreneurs and Small Businesses
Social Media For Busy Entrepreneurs and Small Businesses Social Media For Busy Entrepreneurs and Small Businesses
Social Media For Busy Entrepreneurs and Small Businesses
 
Imágenes inmersivas
Imágenes inmersivasImágenes inmersivas
Imágenes inmersivas
 
Crisis Subprime en España
Crisis Subprime en EspañaCrisis Subprime en España
Crisis Subprime en España
 
Ecosistemas
EcosistemasEcosistemas
Ecosistemas
 
Linux as a gaming platform - Errata
Linux as a gaming platform - ErrataLinux as a gaming platform - Errata
Linux as a gaming platform - Errata
 
CriminalEFS-PowerPoint
CriminalEFS-PowerPointCriminalEFS-PowerPoint
CriminalEFS-PowerPoint
 
Linux as a gaming platform, ideology aside
Linux as a gaming platform, ideology asideLinux as a gaming platform, ideology aside
Linux as a gaming platform, ideology aside
 
Suir img
Suir imgSuir img
Suir img
 
El presidencialismo mexicano antes y después
El presidencialismo mexicano antes y después El presidencialismo mexicano antes y después
El presidencialismo mexicano antes y después
 
Gamedev-grade debugging
Gamedev-grade debuggingGamedev-grade debugging
Gamedev-grade debugging
 
Green Peace y WWF
Green Peace y WWFGreen Peace y WWF
Green Peace y WWF
 

Similar to Service Discovery. Spring Cloud Internals

[Rakuten TechConf2014] [C-5] Ichiba Architecture on ExaLogic
[Rakuten TechConf2014] [C-5] Ichiba Architecture on ExaLogic[Rakuten TechConf2014] [C-5] Ichiba Architecture on ExaLogic
[Rakuten TechConf2014] [C-5] Ichiba Architecture on ExaLogicRakuten Group, Inc.
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileAmazon Web Services Japan
 
Oracle Drivers configuration for High Availability
Oracle Drivers configuration for High AvailabilityOracle Drivers configuration for High Availability
Oracle Drivers configuration for High AvailabilityLudovico Caldara
 
Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)Viral Solani
 
Laravel for Web Artisans
Laravel for Web ArtisansLaravel for Web Artisans
Laravel for Web ArtisansRaf Kewl
 
Admin Tech Ed Presentation Hardening Sql Server
Admin Tech Ed Presentation   Hardening Sql ServerAdmin Tech Ed Presentation   Hardening Sql Server
Admin Tech Ed Presentation Hardening Sql Serverrsnarayanan
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsMykyta Protsenko
 
DevOps Enabling Your Team
DevOps Enabling Your TeamDevOps Enabling Your Team
DevOps Enabling Your TeamGR8Conf
 
Grow and Shrink - Dynamically Extending the Ruby VM Stack
Grow and Shrink - Dynamically Extending the Ruby VM StackGrow and Shrink - Dynamically Extending the Ruby VM Stack
Grow and Shrink - Dynamically Extending the Ruby VM StackKeitaSugiyama1
 
Debugging Microservices - QCON 2017
Debugging Microservices - QCON 2017Debugging Microservices - QCON 2017
Debugging Microservices - QCON 2017Idit Levine
 
The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012Lucas Jellema
 
Breaking a monolith: In-place refactoring with service-oriented architecture ...
Breaking a monolith: In-place refactoring with service-oriented architecture ...Breaking a monolith: In-place refactoring with service-oriented architecture ...
Breaking a monolith: In-place refactoring with service-oriented architecture ...Ryan M Harrison
 
LF_APIStrat17_Breaking a Monolith: In-Place Refactoring with Service-Oriented...
LF_APIStrat17_Breaking a Monolith: In-Place Refactoring with Service-Oriented...LF_APIStrat17_Breaking a Monolith: In-Place Refactoring with Service-Oriented...
LF_APIStrat17_Breaking a Monolith: In-Place Refactoring with Service-Oriented...LF_APIStrat
 
Puppet Camp Melbourne 2014: Node Collaboration with PuppetDB
Puppet Camp Melbourne 2014: Node Collaboration with PuppetDB Puppet Camp Melbourne 2014: Node Collaboration with PuppetDB
Puppet Camp Melbourne 2014: Node Collaboration with PuppetDB Puppet
 
Kerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit eastKerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit eastJorge Lopez-Malla
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Pavel Chunyayev
 
Puppetcamp Melbourne - puppetdb
Puppetcamp Melbourne - puppetdbPuppetcamp Melbourne - puppetdb
Puppetcamp Melbourne - puppetdbm_richardson
 

Similar to Service Discovery. Spring Cloud Internals (20)

[Rakuten TechConf2014] [C-5] Ichiba Architecture on ExaLogic
[Rakuten TechConf2014] [C-5] Ichiba Architecture on ExaLogic[Rakuten TechConf2014] [C-5] Ichiba Architecture on ExaLogic
[Rakuten TechConf2014] [C-5] Ichiba Architecture on ExaLogic
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
 
AMIS Oracle OpenWorld 2013 Review Part 3 - Fusion Middleware
AMIS Oracle OpenWorld 2013 Review Part 3 - Fusion MiddlewareAMIS Oracle OpenWorld 2013 Review Part 3 - Fusion Middleware
AMIS Oracle OpenWorld 2013 Review Part 3 - Fusion Middleware
 
Oracle Drivers configuration for High Availability
Oracle Drivers configuration for High AvailabilityOracle Drivers configuration for High Availability
Oracle Drivers configuration for High Availability
 
Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)Introduction to Laravel Framework (5.2)
Introduction to Laravel Framework (5.2)
 
Laravel for Web Artisans
Laravel for Web ArtisansLaravel for Web Artisans
Laravel for Web Artisans
 
Admin Tech Ed Presentation Hardening Sql Server
Admin Tech Ed Presentation   Hardening Sql ServerAdmin Tech Ed Presentation   Hardening Sql Server
Admin Tech Ed Presentation Hardening Sql Server
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and Ops
 
DevOps Enabling Your Team
DevOps Enabling Your TeamDevOps Enabling Your Team
DevOps Enabling Your Team
 
Grow and Shrink - Dynamically Extending the Ruby VM Stack
Grow and Shrink - Dynamically Extending the Ruby VM StackGrow and Shrink - Dynamically Extending the Ruby VM Stack
Grow and Shrink - Dynamically Extending the Ruby VM Stack
 
UVM TUTORIAL;
UVM TUTORIAL;UVM TUTORIAL;
UVM TUTORIAL;
 
Debugging Microservices - QCON 2017
Debugging Microservices - QCON 2017Debugging Microservices - QCON 2017
Debugging Microservices - QCON 2017
 
The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012
 
The Very Very Latest In Database Development - Lucas Jellema - Oracle OpenWor...
The Very Very Latest In Database Development - Lucas Jellema - Oracle OpenWor...The Very Very Latest In Database Development - Lucas Jellema - Oracle OpenWor...
The Very Very Latest In Database Development - Lucas Jellema - Oracle OpenWor...
 
Breaking a monolith: In-place refactoring with service-oriented architecture ...
Breaking a monolith: In-place refactoring with service-oriented architecture ...Breaking a monolith: In-place refactoring with service-oriented architecture ...
Breaking a monolith: In-place refactoring with service-oriented architecture ...
 
LF_APIStrat17_Breaking a Monolith: In-Place Refactoring with Service-Oriented...
LF_APIStrat17_Breaking a Monolith: In-Place Refactoring with Service-Oriented...LF_APIStrat17_Breaking a Monolith: In-Place Refactoring with Service-Oriented...
LF_APIStrat17_Breaking a Monolith: In-Place Refactoring with Service-Oriented...
 
Puppet Camp Melbourne 2014: Node Collaboration with PuppetDB
Puppet Camp Melbourne 2014: Node Collaboration with PuppetDB Puppet Camp Melbourne 2014: Node Collaboration with PuppetDB
Puppet Camp Melbourne 2014: Node Collaboration with PuppetDB
 
Kerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit eastKerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit east
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015
 
Puppetcamp Melbourne - puppetdb
Puppetcamp Melbourne - puppetdbPuppetcamp Melbourne - puppetdb
Puppetcamp Melbourne - puppetdb
 

More from Aleksandr Tarasov

Cocktail of Environments. How to Mix Test and Development Environments and St...
Cocktail of Environments. How to Mix Test and Development Environments and St...Cocktail of Environments. How to Mix Test and Development Environments and St...
Cocktail of Environments. How to Mix Test and Development Environments and St...Aleksandr Tarasov
 
Service Discovery. More that it seems
Service Discovery. More that it seemsService Discovery. More that it seems
Service Discovery. More that it seemsAleksandr Tarasov
 
Расширь границы возможного вместе с Gradle
Расширь границы возможного вместе с GradleРасширь границы возможного вместе с Gradle
Расширь границы возможного вместе с GradleAleksandr Tarasov
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterAleksandr Tarasov
 
Хипстеры в энтерпрайзе
Хипстеры в энтерпрайзеХипстеры в энтерпрайзе
Хипстеры в энтерпрайзеAleksandr Tarasov
 

More from Aleksandr Tarasov (6)

Cocktail of Environments. How to Mix Test and Development Environments and St...
Cocktail of Environments. How to Mix Test and Development Environments and St...Cocktail of Environments. How to Mix Test and Development Environments and St...
Cocktail of Environments. How to Mix Test and Development Environments and St...
 
Service Discovery. More that it seems
Service Discovery. More that it seemsService Discovery. More that it seems
Service Discovery. More that it seems
 
WILD microSERVICES v2
WILD microSERVICES v2WILD microSERVICES v2
WILD microSERVICES v2
 
Расширь границы возможного вместе с Gradle
Расширь границы возможного вместе с GradleРасширь границы возможного вместе с Gradle
Расширь границы возможного вместе с Gradle
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
Хипстеры в энтерпрайзе
Хипстеры в энтерпрайзеХипстеры в энтерпрайзе
Хипстеры в энтерпрайзе
 

Recently uploaded

Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 

Recently uploaded (20)

Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 

Service Discovery. Spring Cloud Internals