Packages

  • package root
    Definition Classes
    root
  • package com

    Start with com.twitter.finagle.

    Definition Classes
    root
  • package twitter

    Start with com.twitter.finagle.

    Definition Classes
    com
  • package finagle

    Finagle is an extensible RPC system.

    Finagle is an extensible RPC system.

    Services are represented by class com.twitter.finagle.Service. Clients make use of com.twitter.finagle.Service objects while servers implement them.

    Finagle contains a number of protocol implementations; each of these implement Client and/or com.twitter.finagle.Server. For example, Finagle's HTTP implementation, com.twitter.finagle.Http (in package finagle-http), exposes both.

    Thus a simple HTTP server is built like this:

    import com.twitter.finagle.{Http, Service}
    import com.twitter.finagle.http.{Request, Response}
    import com.twitter.util.{Await, Future}
    
    val service = new Service[Request, Response] {
      def apply(req: Request): Future[Response] =
        Future.value(Response())
    }
    val server = Http.server.serve(":8080", service)
    Await.ready(server)

    We first define a service to which requests are dispatched. In this case, the service returns immediately with a HTTP 200 OK response, and with no content.

    This service is then served via the Http protocol on TCP port 8080. Finally we wait for the server to stop serving.

    We can now query our web server:

    % curl -D - localhost:8080
    HTTP/1.1 200 OK

    Building an HTTP client is also simple. (Note that type annotations are added for illustration.)

    import com.twitter.finagle.{Http, Service}
    import com.twitter.finagle.http.{Request, Response}
    import com.twitter.util.{Future, Return, Throw}
    
    val client: Service[Request, Response] = Http.client.newService("localhost:8080")
    val f: Future[Response] = client(Request()).respond {
      case Return(rep) =>
        printf("Got HTTP response %s\n", rep)
      case Throw(exc) =>
        printf("Got error %s\n", exc)
    }

    Http.client.newService("localhost:8080") constructs a new com.twitter.finagle.Service instance connected to localhost TCP port 8080. We then issue a HTTP/1.1 GET request to URI "/". The service returns a com.twitter.util.Future representing the result of the operation. We listen to this future, printing an appropriate message when the response arrives.

    The Finagle homepage contains useful documentation and resources for using Finagle.

    Definition Classes
    twitter
  • package loadbalancer

    This package implements client side load balancing algorithms.

    This package implements client side load balancing algorithms.

    As an end-user, see the Balancers API to create instances which can be used to configure a Finagle client with various load balancing strategies.

    As an implementor, each algorithm gets its own subdirectory and is exposed via the Balancers object. Several convenient traits are provided which factor out common behavior and can be mixed in (i.e. Balancer, DistributorT, NodeT, and Updating).

    Definition Classes
    finagle
  • package aperture
    Definition Classes
    loadbalancer
  • DeterministicOrdering
  • package exp
    Definition Classes
    loadbalancer

package aperture

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. All

Value Members

  1. object DeterministicOrdering

    DeterministicOrdering exposes a mechanism that allows a process to be furnished with a coordinate which is used to derive ordering in an Aperture implementation.

    DeterministicOrdering exposes a mechanism that allows a process to be furnished with a coordinate which is used to derive ordering in an Aperture implementation. The coordinate is calculated relative to other nodes in the process' peer group such that each coordinate is uniformly spaced from another given a shared coordinate space (in our case, [-1.0, 1.0]). The result is that each process that is part of the respective group is now part of a topology with a sense of order and proximity.

    A unique permutation for a group of servers (that Apertures expand over) can be then derived by mapping the servers to the same coordinate space and iterating through the space using a uniform traversal (see the Iterators defined on Ring for more details). Thus, when the group of peers converges on an aperture size, the servers are equally represented across the peer's aperture.

    This remedies a shortcoming with the default Aperture implementation where peers randomly select the servers in their aperture and, consequently, create load imbalances since servers have a well understood probability of being non-uniformly represented across client apertures.

    Note

    To use this, the coordinate needs to be set via setCoordinate and the implementation used by the client must have the useDeterministicOrdering set to true.

Ungrouped