Spencer Gibb
twitter: @spencerbgibb
email: sgibb@pivotal.io
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Spencer Gibb | @spencerbgibb | OSS |
Dave Syer | @david_syer | OSS |
Adrian Cole | @adrianfcole | OSS |
Marcin Grzejszczak | @MGrzejszczak | OSS |
Matt Stine | Scott Frederick | Roy Clarkson |
Mike Heath | Vinicius Carvalho | Chris Schaefer |
Craig Walls | Ben Klein | Will Tran |
Andy Clement | Mike Gehard |
I like 'cloud native' better than microservice. I think its more descriptive and doesn't have the awkwardness of having 'micro" in the name.
It needs to be super easy to implement and update a service:
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
Hello World!
}
}
It's excellent to be able to implement a microservice really easily (Spring Boot), but building a system that way surfaces "non-functional" requirements that you otherwise didn't have.
There are laws of physics that make some problems unsolvable (consistency, latency), but brittleness and manageability can be addressed with generic, boiler plate patterns.
Coordination of distributed systems
leads to boiler plate patterns
Archaius
Curator
RestTemplate
integrationhttp://techblog.netflix.com/2013/01/announcing-ribbon-tying-netflix-mid.html
@EnableFeignClients
@FeignClient(name = "stores")
public interface StoreClient {
@RequestMapping(method = GET, value = "/simple/stores")
List<Map<String, ?>> getStores();
@RequestMapping(method = GET, value = "/stores/{storeId}")
Store getStore(@PathVariable("storeId") String storeId,
@RequestParam("myparam") String myparam);
}
/metrics
/hystrix.stream
@EnableHystrixDashboard
Observable
frompublic static void hello(String... names) {
Observable.from(names).subscribe(s -> {
System.out.println("Hello " + s + "!");
});
}
Sample functions:
http://techblog.netflix.com/2013/06/announcing-zuul-edge-service-in-cloud.html
Enable Single Sign On (SSO) with an OAuth2 provider declared in external properties.
@EnableOAuth2Sso
Enable security using OAuth2 access tokens
@EnableResourceServer
https://spring.io/guides/tutorials/spring-security-and-angular-js/
/bus/env
and /bus/refresh
actuator endpointsBinder
@SpringBootApplication
@EnableBinding(Sink.class)
@MessageEndpoint
public class CounterApplication {
@ServiceActivator(inputChannel = Sink.INPUT)
@Transactional
public void accept(Vote vote) {
logger.info("Received: " + vote);
}
}
http://techblog.netflix.com/2014/11/prana-sidecar-for-your-netflix-paas.html
Milestones:
Previews, experiments or ideas (ie: no guarantees!)
Utah Spring Users Group is where you can learn more about Spring, Spring Boot, and more Spring Projects. We support the Spring community along the Wasatch Front.
[source,http]
----
HTTP/1.1 200 OK
Content-Type: application/hal+json
{
"_links" : {
"users" : {
"href" : "http://localhost:11070/users{?page,size,sort}",
"templated" : true
},
"profile" : {
"href" : "http://localhost:11070/alps"
}
}
}
----
@EnableRedisHttpSession
Deploying services needs to be simple and reproducible
$ cf push app.groovy
and you don't get much more convenient than that.
(Same argument for other PaaS solutions)
From: kt4@prism.gatech.EDU (Ken Thompson)
Subject: Re: LINUX is obsolete
Date: 3 Feb 92 23:07:54 GMT
Organization: Georgia Institute of Technology
I would generally agree that microkernels are probably the wave
of the future. However, it is in my opinion easier to implement
a monolithic kernel. It is also easier for it to turn into a
mess in a hurry as it is modified.
Regards, Ken