{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,11,6]],"date-time":"2025-11-06T19:59:42Z","timestamp":1762459182379,"version":"3.41.0"},"reference-count":22,"publisher":"Association for Computing Machinery (ACM)","issue":"1","license":[{"start":{"date-parts":[[2014,5,15]],"date-time":"2014-05-15T00:00:00Z","timestamp":1400112000000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["SIGOPS Oper. Syst. Rev."],"published-print":{"date-parts":[[2014,5,15]]},"abstract":"<jats:p>Building server software in a large-scale setting, where systems exhibit a high degree of concurrency and environmental variability, is a challenging task to even the most experienced programmer. Efficiency, safety, and robustness are paramount-goals which have traditionally conflicted with modularity, reusability, and flexibility. We describe three abstractions which combine to present a powerful programming model for building safe, modular, and efficient server software: Composable futures are used to relate concurrent, asynchronous actions; services and filters are specialized functions used for the modular composition of our complex server software. Finally, we discuss our experiences using these abstractions and techniques throughout Twitter's serving infrastructure.<\/jats:p>","DOI":"10.1145\/2626401.2626413","type":"journal-article","created":{"date-parts":[[2014,5,20]],"date-time":"2014-05-20T13:47:43Z","timestamp":1400593663000},"page":"51-57","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["Your server as a function"],"prefix":"10.1145","volume":"48","author":[{"given":"Marius","family":"Eriksen","sequence":"first","affiliation":[{"name":"Twitter Inc."}]}],"member":"320","published-online":{"date-parts":[[2014,5,15]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"Go. http:\/\/www.golang.org.  Go. http:\/\/www.golang.org."},{"key":"e_1_2_1_2_1","unstructured":"Haskell. http:\/\/www.haskell.org.  Haskell. http:\/\/www.haskell.org."},{"key":"e_1_2_1_3_1","first-page":"4","article-title":"Thrift: Scalable crosslanguage services implementation. Technical report","author":"Agarwal A.","year":"2007","journal-title":"Facebook"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/69558.69562"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICDE.2012.149"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/1281100.1281103"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2408776.2408794"},{"key":"e_1_2_1_8_1","doi-asserted-by":"crossref","unstructured":"S. Doeraene and P. Van Roy. A new concurrency model for scala based on a declarative dataflow core. 2013.  S. Doeraene and P. Van Roy. A new concurrency model for scala based on a declarative dataflow core. 2013.","DOI":"10.1145\/2489837.2489841"},{"key":"e_1_2_1_9_1","unstructured":"M. Eriksen. jvmgcprof. https:\/\/github.com\/twitter\/jvmgcprof Nov. 2012.  M. Eriksen. jvmgcprof. https:\/\/github.com\/twitter\/jvmgcprof Nov. 2012."},{"key":"e_1_2_1_10_1","unstructured":"M. Eriksen and N. Kallen. Finagle. http:\/\/twitter.github.com\/finagle Nov. 2010.  M. Eriksen and N. Kallen. Finagle. http:\/\/twitter.github.com\/finagle Nov. 2010."},{"issue":"124","key":"e_1_2_1_11_1","first-page":"5","article-title":"Distributed caching with memcached","volume":"2004","author":"Fitzpatrick B.","journal-title":"Linux J."},{"volume-title":"Inc.","year":"1995","author":"Gamma E.","key":"e_1_2_1_12_1"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380200104"},{"key":"e_1_2_1_14_1","unstructured":"M. O. Heather Miller and P. Haller. SIP-21 - Spores. http:\/\/docs.scala-lang.org\/sips\/pending\/spores.html 2013.  M. O. Heather Miller and P. Haller. SIP-21 - Spores. http:\/\/docs.scala-lang.org\/sips\/pending\/spores.html 2013."},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/258533.258660"},{"key":"e_1_2_1_16_1","unstructured":"B. Matheny. Eliminating duplicate requests. http:\/\/tumblr.mobocracy.net\/post\/45358335655\/eliminating-duplicate-requests Mar. 2013.  B. Matheny. Eliminating duplicate requests. http:\/\/tumblr.mobocracy.net\/post\/45358335655\/eliminating-duplicate-requests Mar. 2013."},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.5555\/645679.664095"},{"volume-title":"MIT Press","year":"2004","author":"Roy P. V.","key":"e_1_2_1_19_1"},{"volume-title":"Inc.","year":"2010","author":"Sigelman B. H.","key":"e_1_2_1_20_1"},{"key":"e_1_2_1_21_1","first-page":"324","volume-title":"COMPUTER SCIENCE TODAY, LECTURE NOTES IN COMPUTER SCIENCE","author":"Smolka G.","year":"1995"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/1411304.1411307"},{"key":"e_1_2_1_23_1","first-page":"1867","volume-title":"IEEE International Conference on ICASSP'87","volume":"12","author":"Zissman M.","year":"1987"}],"container-title":["ACM SIGOPS Operating Systems Review"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2626401.2626413","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/2626401.2626413","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T07:19:42Z","timestamp":1750231182000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2626401.2626413"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2014,5,15]]},"references-count":22,"journal-issue":{"issue":"1","published-print":{"date-parts":[[2014,5,15]]}},"alternative-id":["10.1145\/2626401.2626413"],"URL":"https:\/\/doi.org\/10.1145\/2626401.2626413","relation":{},"ISSN":["0163-5980"],"issn-type":[{"type":"print","value":"0163-5980"}],"subject":[],"published":{"date-parts":[[2014,5,15]]},"assertion":[{"value":"2014-05-15","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}