浏览代码

Update Finagle benchamrk

Vladimir Kostyukov 9 年之前
父节点
当前提交
0d2692fea5

二进制
frameworks/Scala/finagle/.cache


+ 0 - 34
frameworks/Scala/finagle/.classpath

@@ -1,34 +0,0 @@
-<classpath>
-  <classpathentry output="target/scala-2.10/classes" path="src/main/scala" kind="src"></classpathentry>
-  <classpathentry output="target/scala-2.10/classes" path="src/main/java" kind="src"></classpathentry>
-  <classpathentry output="target/scala-2.10/test-classes" path="src/test/scala" kind="src"></classpathentry>
-  <classpathentry output="target/scala-2.10/test-classes" path="src/test/java" kind="src"></classpathentry>
-  <classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_CONTAINER"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/finagle-http_2.10/jars/finagle-http_2.10-6.2.1.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/finagle-core_2.10/jars/finagle-core_2.10-6.2.1.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/io.netty/netty/bundles/netty-3.5.12.Final.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/util-core_2.10/jars/util-core_2.10-6.2.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/util-collection_2.10/jars/util-collection_2.10-6.2.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/commons-collections/commons-collections/jars/commons-collections-3.2.1.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/util-hashing_2.10/jars/util-hashing_2.10-6.2.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/util-jvm_2.10/jars/util-jvm_2.10-6.2.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/util-logging_2.10/jars/util-logging_2.10-6.2.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/util-app_2.10/jars/util-app_2.10-6.2.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.twitter/util-codec_2.10/jars/util-codec_2.10-6.2.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/commons-codec/commons-codec/jars/commons-codec-1.5.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/commons-lang/commons-lang/jars/commons-lang-2.6.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.fasterxml.jackson.module/jackson-module-scala_2.10/jars/jackson-module-scala_2.10-2.1.3.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.fasterxml.jackson.core/jackson-core/jars/jackson-core-2.1.2.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.fasterxml.jackson.core/jackson-annotations/jars/jackson-annotations-2.1.2.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.fasterxml.jackson.core/jackson-databind/jars/jackson-databind-2.1.2.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.thoughtworks.paranamer/paranamer/jars/paranamer-2.3.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.google.guava/guava/jars/guava-13.0.1.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.10.0.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/com.typesafe.slick/slick_2.10/jars/slick_2.10-1.0.0.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.6.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/mysql/mysql-connector-java/jars/mysql-connector-java-5.1.24.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/commons-dbcp/commons-dbcp/jars/commons-dbcp-1.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="/home/dknapp/.ivy2/cache/commons-pool/commons-pool/jars/commons-pool-1.5.4.jar" kind="lib"></classpathentry>
-  <classpathentry path="org.eclipse.jdt.launching.JRE_CONTAINER" kind="con"></classpathentry>
-  <classpathentry path="bin" kind="output"></classpathentry>
-</classpath>

+ 0 - 12
frameworks/Scala/finagle/.project

@@ -1,12 +0,0 @@
-<projectDescription>
-  <name>finagle</name>
-  <buildSpec>
-    <buildCommand>
-      <name>org.scala-ide.sdt.core.scalabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.scala-ide.sdt.core.scalanature</nature>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
-</projectDescription>

+ 3 - 2
frameworks/Scala/finagle/benchmark_config.json

@@ -4,13 +4,14 @@
     "default": {
       "setup_file": "setup",
       "json_url": "/json",
+      "plaintext_url": "/plaintext",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Micro",
-      "database": "MySQL",
+      "database": "None",
       "framework": "finagle",
       "language": "Scala",
-      "orm": "Micro",
+      "orm": "Raw",
       "platform": "Netty",
       "webserver": "None",
       "os": "Linux",

+ 3 - 7
frameworks/Scala/finagle/build.sbt

@@ -1,14 +1,10 @@
 name := "finagle"
 
-organization := "com.falmarri"
-
 scalaVersion := "2.11.7"
 
 version := "1.0"
 
 libraryDependencies ++= Seq(
-                "com.twitter" %% "finagle-http" % "6.+",
-                "com.twitter" %% "finagle-mysql" % "6.+",
-                "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.+",
-				"com.fasterxml.jackson.core" % "jackson-databind" % "2.3.0"
-            )
+  "com.twitter" %% "finagle-http" % "6.33.0",
+  "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.5.3"
+)

+ 1 - 1
frameworks/Scala/finagle/setup.sh

@@ -4,4 +4,4 @@ fw_depends java sbt
 
 sbt update compile -batch
 
-sbt -Ddb.host=${DBHOST} run &
+sbt run &

+ 2 - 2
frameworks/Scala/finagle/source_code

@@ -1,2 +1,2 @@
-finagle/src/main/scala/com/falmarri/finagle/
-finagle/src/main/scala/com/falmarri/finagle/Finagle.scala
+finagle/src/main/scala/
+finagle/src/main/scala/Main.scala

+ 52 - 0
frameworks/Scala/finagle/src/main/scala/Main.scala

@@ -0,0 +1,52 @@
+import java.text.{DateFormat, SimpleDateFormat}
+import java.util.Date
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.module.scala.DefaultScalaModule
+import com.twitter.finagle.{Service, SimpleFilter, Http}
+import com.twitter.finagle.stats.NullStatsReceiver
+import com.twitter.finagle.tracing.NullTracer
+import com.twitter.finagle.http.{Request, Response, HttpMuxer}
+import com.twitter.util.{Await, Future}
+import com.twitter.io.Buf
+
+object Main extends App {
+
+  val mapper: ObjectMapper = new ObjectMapper().registerModule(DefaultScalaModule)
+  val dateFormat: DateFormat = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z")
+
+  val helloWorld: Buf = Buf.Utf8("Hello, World!")
+
+  val muxer: HttpMuxer = new HttpMuxer()
+    .withHandler("/json", Service.mk { req: Request =>
+      val rep = Response()
+      rep.content = Buf.Utf8(mapper.writeValueAsString(Map("message" -> "Hello, World!")))
+      rep.contentType = "application/json"
+
+      Future.value(rep)
+    })
+    .withHandler("/plaintext", Service.mk { req: Request => 
+      val rep = Response()
+      rep.content = helloWorld
+      rep.contentType = "text/plain"
+
+      Future.value(rep)
+    })
+
+  val serverAndDate: SimpleFilter[Request, Response] = new SimpleFilter[Request, Response] {
+    def apply(req: Request, s: Service[Request, Response]): Future[Response] =
+      s(req).map { rep =>
+        rep.headerMap.set("Server", "Finagle")
+        rep.headerMap.set("Date", dateFormat.format(new Date()))
+
+        rep
+      }
+  }
+
+  Await.ready(Http.server
+    .withCompressionLevel(0)
+    .withStatsReceiver(NullStatsReceiver)
+    .withTracer(NullTracer)
+    .serve(":8080", serverAndDate.andThen(muxer))
+  )
+}

+ 0 - 105
frameworks/Scala/finagle/src/main/scala/com/falmarri/finagle/Finagle.scala

@@ -1,105 +0,0 @@
-package com.falmarri.finagle
-
-import scala.util.Random
-import scala.collection.immutable.StringOps
-import com.fasterxml.jackson.databind.ObjectMapper
-import com.fasterxml.jackson.module.scala.DefaultScalaModule
-import com.twitter.finagle.Service
-import com.twitter.finagle.exp.Mysql
-import com.twitter.finagle.exp.mysql._
-import org.jboss.netty.handler.codec.http._
-import org.jboss.netty.handler.codec.http.HttpResponseStatus._
-import org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1
-import org.jboss.netty.buffer.ChannelBuffers.wrappedBuffer
-import com.twitter.util.Future
-import java.net.InetSocketAddress
-import com.twitter.finagle.builder.{Server, ServerBuilder}
-import com.twitter.finagle.http.{Http,HttpMuxer}
-
-object FinagleBenchmark extends App {
-  val maxConnections = 256
-
-  //val mysql = new Client(ClientBuilder()
-  //  .codec(new MySQL("benchmarkdbuser", "benchmarkdbpass", Some("hello_world")))
-  //  .hosts(new InetSocketAddress(System.getProperty("db.host", "localhost"), 3306))
-  //  .hostConnectionLimit(maxConnections)
-  //  .buildFactory())
-
-  val username = "benchmarkdbuser"
-  val password = "benchmarkdbpass"
-  val db = "hello_world"
-  val host = System.getProperty("db.host", "localhost")
-
-  val mysql = Mysql
-      .withCredentials(username, password)
-      .withDatabase(db)
-      .newRichClient(host + ":3306")
-
-  val mapper = new ObjectMapper()
-  mapper.registerModule(DefaultScalaModule)
-
-  def getValue(row: Row, name: String): Any = row(name) match {
-    case Some(IntValue(v)) => v
-    case _ => throw new Exception("couldn't get value for %s".format(name))
-  }
-
-  def rowToMap(row: Row) = {
-    Map(
-      "id" -> getValue(row, "id"),
-      "randomNumber" -> getValue(row, "randomNumber")
-    )
-  }
-
-  def serialize(result: Any): Array[Byte] =
-    mapper.writeValueAsBytes(result)
-
-  def createResponse(req: HttpRequest, bytes: Array[Byte]) = {
-    val body = wrappedBuffer(bytes)
-    val resp = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK)
-    //resp.setContentTypeJson
-    resp.setContent(body)
-    //resp.contentLength = body.readableBytes
-    resp
-  }
-
-  val muxService = new HttpMuxer()
-    .withHandler("/json", new Service[HttpRequest, HttpResponse] {
-      def apply(req: HttpRequest): Future[HttpResponse] =
-        Future.value(createResponse(req, serialize(Map("message" -> "Hello, World!"))))
-    })
-  /*
-    .withHandler("/db", new Service[HttpRequest, HttpResponse] {
-      val rand = new Random()
-      val sql = "SELECT * FROM world WHERE id = "
-
-      def apply(req: HttpRequest): Future[HttpResponse] = {
-        //val n = req.params.getIntOrElse("queries", 1)
-        val decoder = new QueryStringDecoder(req.getUri())
-        val n = {
-          val queries = decoder.getParameters().get("queries")
-          if(queries == null) {
-            1
-          }
-          else {
-            queries.get(0).toInt
-          }
-        }
-
-        val qs = (0 until n) map { i =>
-          mysql.select(sql + rand.nextInt(10000))(rowToMap)
-        }
-
-        Future.collect(qs) map { results =>
-          createResponse(req, serialize(results.flatten))
-        }
-      }
-    })
-   */
-
-  //Http.serve(new InetSocketAddress(8080), HttpMuxer)
-  val server: Server = ServerBuilder()
-    .codec(Http())
-    .bindTo(new InetSocketAddress(8080))
-    .name("HttpServer")
-    .build(muxService)
-}