Il cuore dei nostri servizi è scala + akka + spray + mongo. Quindi stiamo usando GitHub per il controllo della versione. Dopo aver unito i PR controllati al ramo principale, Jenkins esegue automaticamente il test dei progetti delle build. Se tutti i test hanno avuto successo, allora Jenking gestisce un paio di script:
- versione del progetto di incremento (attualmente scritto in guscio, ma verrà modificato in SBT)
- Run compito montaggio con sbt-assembly
- Run distribuire lo script (scritto in Python con tessuto) Quale distribuisce il nostro vaso di EC2
Basicaly sul gradino thrid si dispone di un paio di scelte:
Fai un barattolo eseguibile utilizzando il file IO/boot Spray:
object Boot extends App {
implicit val system = ActorSystem("ServiceName")
val log = system.log
val service = system.actorOf(Props[Service], name="serviceActor")
IO(Http) ! Http.Bind(service, interface = host, port = port)
}
Fai un barattolo eseguibile come microkernel di Akka:
In questo caso si dovrebbe estendere la caratteristica di avvio e ignorare startup
e shutdown
metodi:
class Kernel extends Bootable {
// many lines of code
def startup() {
scheduler.start()
SomeActorSystem.startup()
}
def shutdown() {
scheduler.shutdown()
SomeActorSystem.shutdown()
system.shutdown()
}
}
Utilizzando uno StartScript typesafe:
non può mostrare un esempio, ma ha una buona introduzione sul github =)
Stiamo utilizzando tutti in questo modo in diversi casi.
Potresti approfondire il modo in cui gestisci l'arresto regolare per i servizi di spruzzatura in produzione? Posso creare una domanda. – dmitry
@dmitry Non abbiamo alcuna necessità di supportare connessioni long-live, ma in generale è possibile utilizzare il cluster akka con il ciclo di vita di persistenza + attori (hook degli attori). D'altra parte, Spray è anche costruito su Akka, quindi puoi costruire il tuo modulo per spegnere con grazia un server con il messaggio 'Unbind' sull'attore ascoltatore. 'Unbind' richiede un tempo di spegnimento regolare, quindi lo invia all'ascoltatore e aspetta Terminato, quindi puoi 'spegnere' il tuo servizio. – 4lex1v
Solo un aggiornamento a quanto sopra. Sembra che TypeSafe stia sostituendo lo script iniziale con sbt-native-packager https://github.com/sbt/sbt-native-packager –