Dev309 from asgard to zuul - netflix oss-final
- 4. Web UI / Front End API
Middle Tier
MySQL
Data Center
- 6. API or Web Calls
memcached
Cassandra
Web service
S3 bucket
- 7. We’re here to help you get to global scale…
Apache Licensed Cloud Native OSS
http://netflix.github.com
- 12. Web App
Front End
(REST
services)
Micro service Implementation
Hystrix Call “Auth Service”
Ribbon REST client
Eureka
Server(s)
App Service
(auth-service)
with Eureka
Fallback
Implementation Karyon
- 18. Hardware Will Fail
Slowly Changing
Large Scale
Speed
Everything Is Broken
Rapid Change
Large Scale
Everything Works
Slowly Changing
Small Scale
Hardware Will Fail
Rapid Change
Small Scale
Scale
- 26. Web App
Front End
(REST
services)
Micro service Implementation
Hystrix Call “Auth Service”
Ribbon REST client
Eureka
Server(s)
App Service
(auth-service)
with Eureka
Fallback
Implementation Karyon
- 32. Client
A
p
a
c
h
e
Server (Karyon)
HTTP Admin Console
Eureka (Service
Registry)
Apache
Tomcat
Ribbon
Load
Balancing
Metrics
(Servo)
Eureka
Integration
Bootstrapping (Governator)
Metrics (Servo)
Eureka Integration
Registration
Fetch Registry
H
T
T
P
C
L
I
E
N
T
H
y
s
t
r
i
x
EV
Cac
h
e
- 33. Client (Ribbon 2.0) Server (Karyon)
Admin Console
Eureka (Service
Registry)
Ribbon Transport
Load
Balancing
Metrics
(Servo)
Eureka
Integration
Bootstrapping (Governator)
Metrics (Servo)
HTTP
Eureka Integration
Registration
Fetch Registry
Ribbon
Hystrix
EVCache
Rx
Ne
t
t
y
RxNetty
UDP
TCP
WebSockets
SSE
- 34. @ArchaiusBootstrap
@KaryonBootstrap(name
=
"hello-‐netflix-‐oss")
@Modules(include
=
{HelloNossApp.KaryonJerseyModuleImpl.class,
KaryonWebAdminModule.class,
KaryonEurekaModule.class})
public
final
class
HelloNossApp
{
public
static
class
KaryonJerseyModuleImpl
extends
KaryonJerseyModule
{
protected
void
configure()
{
super.configure();
bind(AuthenticationService.class).to(AuthenticationServiceImpl.class);
}
public
int
serverPort()
{
return
8888;
}
public
int
shutdownPort()
{
return
8899;
}
public
void
configureInterceptors(GovernatorHttpInterceptorSupport<ByteBuf,
ByteBuf>
interceptorSupport)
{
interceptorSupport.forUri("/hello").interceptIn(AuthInterceptor.class);
}
}
}
- 35. interface
@Http(method
=
HttpMethod.GET,
uriTemplate="/users/{userId}/recommendations")
@Hystrix(fallbackHandler
=
RecommendationFallbackHandler.class)
@EvCache(name
=
"movie-‐rec",
appName
=
"movieService",
cacheKeyTemplate
=
"{userId}")
recommendationsByUserId @Var "userId"
MovieService
movieService
=
Ribbon.from(MovieService.class);
Observable<Recommendations>
result
=
movieService.recommendationsByUserId(“user1”)
.toObservable();
- 40. Regional Load Balancers
Zuul – Traffic Shaping/Routing
AZ1 AZ2 AZ3
Data Data Data
Geo-located
Chaos Kong
Chaos Kong
Regional Load Balancers
Zuul – Traffic Shaping/Routing
AZ1 AZ2 AZ3
Data Data Data
Customer
Device
- 43. A/B Test
Engine
Personalization
Engine User Info Movie
Metadata
Movie
Ratings
Similar
Movies
API
Reviews
- 44. A/B Test
Engine
Personalization
API
Similar
Movies Reviews User
Info
Engine User Info Movie
Metadata
Movie
Ratings
- 45. A/B Test
Engine
Personalization
Engine
API
User
Movie
Movie
Similar
Info
Metadata
Ratings
Movies Reviews
- 46. User
Info
API
A/B Test
Engine
Personalization
Engine
Movie
Metadata
Movie
Ratings
Similar
Movies Reviews
- 47. A/B Test
Engine
Personalization
Engine
API
User
Movie
Movie
Similar
Info
Metadata
Ratings
Movies Reviews
- 49. User Info
API
A/B Test
Engine
Personalization
Engine
Movie
Metadata
Movie
Ratings
Similar
Movies Reviews
- 50. A/B Test
Engine
Personalization
Engine
API
User
Movie
Movie
Similar
Info
Metadata
Ratings
Movies Reviews
- 52. Personaliza
tion Engine
User
Info
Movie
Metadata
Movie
Ratings
Similar
Movies
API
Reviews A/B Test
Engine
Fallback
- 53. Personaliza
tion Engine
User
Info
Movie
Metadata
Movie
Ratings
Similar
Movies
API
Reviews A/B Test
Engine
Fallback
- 66. Mac OS X
Virtual Box
Ubuntu 14.04
single kernel
Container #1
Filesystem + process
Eureka
Container
Zuul
Container
...
Another
Container