10.1145/3359591.3359729acmconferencesArticle/Chapter ViewAbstractPublication PagessplashConference Proceedings
ARTICLE

Storage combinators

ABSTRACT

The ability to compose software from high level components is as sought after as it is elusive. The REST architectural style used in the World Wide Web enables such plug-compatible components in distributed settings.

We propose storage combinators, a type of plug-compatible component that can be used as generic intermediary in a non-distributed setting.

Storage combinators combine several stores – components that support REST-style verbs – into a single component that also provides a store interface.

This mechanism allows a few basic components to be combined in many different ways to achieve different effects with or without adaptation. It correlates with reported increases in productivity while performing well in commercial applications with millions of users.

References

  1. 1995. Apache Web Server. https://httpd.apache.orgGoogle ScholarGoogle Scholar
  2. 1995. Squid Web Cache. http://www.squid-cache.orgGoogle ScholarGoogle Scholar
  3. 2004. Nginx Web Server. https://nginx.orgGoogle ScholarGoogle Scholar
  4. 2005. http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork. htmlGoogle ScholarGoogle Scholar
  5. 2006. Varnish Web Cache. https://varnish-cache.orgGoogle ScholarGoogle Scholar
  6. 2009. Macworld: Best of Show 2009. https://www.itworld.com/article/ 2782292/macworld--best-of-show-2009.htmlGoogle ScholarGoogle Scholar
  7. 2009. node.js. https://nodejs.org/en/Google ScholarGoogle Scholar
  8. 2015. HTTP Middleware. https://laravel.com/docs/5.0/middlewareGoogle ScholarGoogle Scholar
  9. 2015. Wikipedia: Wunderlist. https://en.wikipedia.org/wiki/ WunderlistGoogle ScholarGoogle Scholar
  10. 2016. Fastify. https://www.fastify.ioGoogle ScholarGoogle Scholar
  11. Atul Adya, Daniel Myers, Henry Qin, and Robert Grandl. 2019. Fast key-value stores: An idea whose time has come and gone. In HotOS XVII .Google ScholarGoogle Scholar
  12. M.J. Bach. 1986. The Design of the UNIX Operating System. PrenticeHall. https://books.google.de/books?id=NrBQAAAAMAAJGoogle ScholarGoogle Scholar
  13. Luiz André Barroso, Kourosh Gharachorloo, Robert McNamara, Andreas Nowatzyk, Shaz Qadeer, Barton Sano, Scott Smith, Robert Stets, and Ben Verghese. 2000. Piranha: A Scalable Architecture Based on Single-chip Multiprocessing. SIGARCH Computer Architecture News 28, 2 (May 2000), 282–293. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. Don Batory and Sean O’Mally. 1992. The Design and Implementation of Hierarchical Software Systems with Reusable Components. ACM Transactions on Software Engineering and Methodology (October 1992).Google ScholarGoogle Scholar
  15. Konstantin Haase Blake Mizerany. 2007. Sinatra. http://sinatrarb.comGoogle ScholarGoogle Scholar
  16. Frederick P. Brooks. 1975. The Mythical Man-Month. Addison Wesley, Reading, Mass.Google ScholarGoogle Scholar
  17. Robert DeLine. 1999. Avoiding Packaging Mismatch with Flexible Packaging. In Proceedings of the 21st International Conference on Software Engineering (ICSE ’99) . ACM, New York, NY, USA, 97–106. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. R. Fielding and J. Reschke. 2014. Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content . RFC 7231. RFC Editor. http://www.rfc-editor. org/rfc/rfc7231.txt http://www.rfc-editor.org/rfc/rfc7231.txt .Google ScholarGoogle Scholar
  19. Roy Thomas Fielding. 2000. Architectural Styles and the Design of Network-based Software Architectures . Ph.D. Dissertation. AAI9980887.Google ScholarGoogle Scholar
  20. J. Nathan Foster, Michael B. Greenwald, Jonathan T. Moore, Benjamin C. Pierce, and Alan Schmitt. 2005. Combinators for Bi-directional Tree Transformations: A Linguistic Approach to the View Update Problem. SIGPLAN Not. 40, 1 (Jan. 2005), 233–246. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Paolo Di Francesco, Patricia Lago, and Ivano Malavolta. 2019. Architecting with microservices: A systematic mapping study. Journal of Systems and Software 150 (2019), 77 – 97. Google ScholarGoogle ScholarCross RefCross Ref
  22. Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. 1995. Design Patterns: Elements of Reusable Object-oriented Software . AddisonWesley Longman Publishing Co., Inc., Boston, MA, USA.Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. David Garlan, Robert Allen, and John Ockerbloom. 1995. Architectural Mismatch: Why Reuse Is So Hard. IEEE Softw. 12, 6 (Nov. 1995), 17–26. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. David Garlan, Robert Allen, and John Ockerbloom. 2009. Architectural Mismatch: Why Reuse Is Still So Hard. IEEE Softw. 26, 4 (July 2009), 66–69. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Christian Grothoff and other authors. 2003. GNU libmichrohttpd. https://www.gnu.org/software/libmicrohttpd/Google ScholarGoogle Scholar
  26. John S. Heidemann and Gerald J. Popek. 1994. File-system Development with Stackable Layers. ACM Trans. Comput. Syst. 12, 1 (Feb. 1994), 58–89. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. J. Hughes. 1989. Why Functional Programming Matters. Comput. J. 32, 2 (April 1989), 98–107. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. Mykhailo Karpenko. 2019. Personal Communication. (4 2019).Google ScholarGoogle Scholar
  29. Alan C. Kay. 1996. History of Programming languages—II. ACM, New York, NY, USA, Chapter The Early History of Smalltalk, 511–598. Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. Michael Keith and Randy Stafford. 2008. Exposing the ORM Cache. Queue 6, 3 (May 2008), 38–47. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Ralph Keller and Urs Hölzle. 1998. Binary Component Adaptation. In Proceedings of the 12th European Conference on Object-Oriented Programming (ECCOP ’98) . Springer-Verlag, Berlin, Heidelberg, 307– 329. http://dl.acm.org/citation.cfm?id=646155.679694Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Samuel C. Kendall, Jim Waldo, Ann Wollrath, and Geoff Wyant. 1994. A Note on Distributed Computing . Technical Report. Mountain View, CA, USA.Google ScholarGoogle Scholar
  33. Marius Lichtblau, Patrick Rein, Stefan Ramson, Johannes Henning, Marcel Weiher, and Robert Hirschfeld. 2018. Squeak/Smalltalk Implementation of Polymorphic Identifiers. https://github.com/hpi-swalab/squeak-polymorphic-identifiersGoogle ScholarGoogle Scholar
  34. Jens Lincke. 2019. Personal Communication. (4 2019).Google ScholarGoogle Scholar
  35. Trygve M. H. Reenskaug. 1979. Thing-Model-View-Editor – an Example from a Planning System. http://heim.ifi.uio.no/ trygver/1979/mvc1/1979-05-MVC.pdf. http://heim.ifi.uio.no/~trygver/1979/mvc-1/1979-05-MVC.pdfGoogle ScholarGoogle Scholar
  36. James Lewis Martin Fowler. 2014. Microservices: a definition of this new architectural term. https://martinfowler.com/articles/ microservices.htmlGoogle ScholarGoogle Scholar
  37. John McCarthy. 1959. Recursive Functions of Symbolic Expressions and Their Computation by Machine . Technical Report. Cambridge, MA, USA.Google ScholarGoogle Scholar
  38. Doug McIlroy. 1964. Pipes Proposal. http://doc.cat-v.org/unix/pipes/Google ScholarGoogle Scholar
  39. Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, and Phil Winterbottom. 1993. The Use of Name Spaces in Plan 9. Operating Systems Review 27, 2 (April 1993), 72–76. http://plan9.bell-labs.com/ sys/doc/names.pdfGoogle ScholarGoogle ScholarDigital LibraryDigital Library
  40. Armin Ronacher. 2010. Flask: a Python Web Microframework. https: //palletsprojects.com/p/flask/Google ScholarGoogle Scholar
  41. Mary Shaw and David Garlan. 1996. Software Architecture: Perspectives on an Emerging Discipline . Prentice-Hall, Inc., Upper Saddle River, NJ, USA.Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. Guido van Rossum and Fred L. Drake. 2011. The Python Language Reference Manual . Network Theory Ltd.Google ScholarGoogle Scholar
  43. Xing Wang. 2017. What is HTTP middleware? Best practices for building, designing and using middleware. https://www.moesif.com/ blog/engineering/middleware/What-Is-HTTP-Middleware/Google ScholarGoogle Scholar
  44. Marcel Weiher. 1998. MPWFoundation Framework. https://github. com/mpw/MPWFoundationGoogle ScholarGoogle Scholar
  45. Marcel Weiher. 2003. Objective-Smalltalk. http://objective.stGoogle ScholarGoogle Scholar
  46. Marcel Weiher. 2003. ObjectiveHTTPD Framework. https://github. com/mpw/ObjectiveHTTPDGoogle ScholarGoogle Scholar
  47. Marcel Weiher and Craig Dowie. 2014. In-Process REST at the BBC. In REST: Advanced Research Topics and Practical Applications, Cesare Pautasso, Erik Wilde, and Rosa Alarcon (Eds.). Springer New York, 193–209. Google ScholarGoogle ScholarCross RefCross Ref
  48. Marcel Weiher and Robert Hirschfeld. 2013. Polymorphic Identifiers: Uniform Resource Access in Objective-Smalltalk. In Proceedings of the 9th Symposium on Dynamic Languages (DLS ’13) . ACM, New York, NY, USA, 61–72. Google ScholarGoogle ScholarDigital LibraryDigital Library
  49. Marcel Weiher and Robert Hirschfeld. 2016. Constraints As Polymorphic Connectors. In Proceedings of the 15th International Conference on Modularity (MODULARITY 2016) . ACM, New York, NY, USA, 134–145. Google ScholarGoogle ScholarDigital LibraryDigital Library
  50. Edward Yourdon and Larry L. Constantine. 1979. Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design (1st ed.). Prentice-Hall, Inc., Upper Saddle River, NJ, USA.Google ScholarGoogle Scholar

Index Terms

  1. Storage combinators

              Comments

              Login options

              Check if you have access through your login credentials or your institution to get full access on this article.

              Sign in
              • Published in

                ACM Conferences cover image
                Onward! 2019: Proceedings of the 2019 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software
                October 2019
                197 pages
                ISBN:9781450369954
                DOI:10.1145/3359591

                Copyright © 2019 ACM

                Publisher

                Association for Computing Machinery

                New York, NY, United States

                Publication History

                • Published: 23 October 2019

                Permissions

                Request permissions about this article.

                Request Permissions

                Qualifiers

                • ARTICLE

                Acceptance Rates

                Overall Acceptance Rate 53 of 128 submissions, 41%

              PDF Format

              View or Download as a PDF file.

              PDF

              eReader

              View online with eReader.

              eReader
              About Cookies On This Site

              We use cookies to ensure that we give you the best experience on our website.

              Learn more

              Got it!