Alternatives to Elasticsearch logo

Alternatives to Elasticsearch

Datadog, Solr, Lucene, MongoDB, and Algolia are the most popular alternatives and competitors to Elasticsearch.
34K
26.5K
+ 1
1.6K

What is Elasticsearch and what are its top alternatives?

Elasticsearch is a highly scalable and distributed open-source search and analytics engine based on Apache Lucene. It is commonly used for centralized logging, full-text search, and application monitoring. Key features include real-time data ingestion, index replication and recovery, complex search queries using Elasticsearch Query DSL, and integration with various data visualization tools. However, Elasticsearch can be complex to set up and manage, especially in large-scale deployments, and it requires significant resources in terms of memory and storage.

  1. Apache Solr: Apache Solr is a popular, full-text search engine built on Apache Lucene. It provides features like facets, advanced searching capabilities, and high scalability. Pros: Highly configurable, robust search functionality. Cons: Steeper learning curve compared to Elasticsearch.
  2. Algolia: Algolia is a hosted search-as-a-service platform that provides instant search results and supports real-time indexing. Pros: Easy to use, scalable, and provides rich features like typo tolerance and geo-search. Cons: Limited control over data storage and indexing.
  3. MeiliSearch: MeiliSearch is an open-source search engine with a strong focus on relevance and speed. It offers features like typo-tolerance, filtering, and faceted search. Pros: Fast search response times, easy to set up and use. Cons: Limited scalability compared to Elasticsearch.
  4. Splunk: Splunk is a data analytics platform that offers search, monitoring, and visualization capabilities. It is widely used for log management and operational intelligence. Pros: Robust data analysis features, powerful visualization tools. Cons: Expensive licensing model, resource-intensive.
  5. Amazon Elasticsearch Service: Amazon Elasticsearch Service is a fully managed service that makes it easy to deploy, secure, and scale Elasticsearch clusters in the AWS cloud. Pros: Managed service, easy integration with other AWS services. Cons: Limited customization options compared to self-managed Elasticsearch.
  6. Azure Cognitive Search: Azure Cognitive Search is a cloud-based search service that offers AI-powered capabilities like semantic search, personalized recommendation, and text analytics. Pros: Integration with Azure ecosystem, AI-powered features. Cons: Limited scalability for very large datasets.
  7. Manticore Search: Manticore Search is an open-source search engine that emphasizes performance and scalability. It supports full-text search, geo-spatial search, and real-time indexing. Pros: High performance, easy integration with MySQL and MariaDB. Cons: Limited community support compared to Elasticsearch.
  8. RediSearch: RediSearch is a full-text search engine module for Redis that provides real-time indexing and querying capabilities. Pros: Seamless integration with Redis, real-time search functionality. Cons: Limited features compared to Elasticsearch for complex search queries.
  9. OpenSearch: OpenSearch is a community-driven, open-source search engine forked from Elasticsearch and Kibana. It offers features like comprehensive REST APIs, data visualization tools, and security plugins. Pros: Continuation of Elasticsearch open-source project, community-driven development. Cons: Potential lack of enterprise support and documentation.
  10. Vespa: Vespa is a scalable and high-performance search engine platform developed by Yahoo. It is designed for handling large-scale and real-time search applications with features like content recommendations, machine learning algorithms, and user personalization. Pros: High performance, scalable architecture. Cons: Steeper learning curve, limited community support.

Top Alternatives to Elasticsearch

  • Datadog
    Datadog

    Datadog is the leading service for cloud-scale monitoring. It is used by IT, operations, and development teams who build and operate applications that run on dynamic or hybrid cloud infrastructure. Start monitoring in minutes with Datadog! ...

  • Solr
    Solr

    Solr is the popular, blazing fast open source enterprise search platform from the Apache Lucene project. Its major features include powerful full-text search, hit highlighting, faceted search, near real-time indexing, dynamic clustering, database integration, rich document (e.g., Word, PDF) handling, and geospatial search. Solr is highly reliable, scalable and fault tolerant, providing distributed indexing, replication and load-balanced querying, automated failover and recovery, centralized configuration and more. Solr powers the search and navigation features of many of the world's largest internet sites. ...

  • Lucene
    Lucene

    Lucene Core, our flagship sub-project, provides Java-based indexing and search technology, as well as spellchecking, hit highlighting and advanced analysis/tokenization capabilities. ...

  • MongoDB
    MongoDB

    MongoDB stores data in JSON-like documents that can vary in structure, offering a dynamic, flexible schema. MongoDB was also designed for high availability and scalability, with built-in replication and auto-sharding. ...

  • Algolia
    Algolia

    Our mission is to make you a search expert. Push data to our API to make it searchable in real time. Build your dream front end with one of our web or mobile UI libraries. Tune relevance and get analytics right from your dashboard. ...

  • Splunk
    Splunk

    It provides the leading platform for Operational Intelligence. Customers use it to search, monitor, analyze and visualize machine data. ...

  • Kibana
    Kibana

    Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elasticsearch. ...

  • Cassandra
    Cassandra

    Partitioning means that Cassandra can distribute your data across multiple machines in an application-transparent matter. Cassandra will automatically repartition as machines are added and removed from the cluster. Row store means that like relational databases, Cassandra organizes data by rows and columns. The Cassandra Query Language (CQL) is a close relative of SQL. ...

Elasticsearch alternatives & related posts

Datadog logo

Datadog

9.2K
7.9K
859
Unify logs, metrics, and traces from across your distributed infrastructure.
9.2K
7.9K
+ 1
859
PROS OF DATADOG
  • 138
    Monitoring for many apps (databases, web servers, etc)
  • 107
    Easy setup
  • 87
    Powerful ui
  • 84
    Powerful integrations
  • 70
    Great value
  • 54
    Great visualization
  • 46
    Events + metrics = clarity
  • 41
    Notifications
  • 41
    Custom metrics
  • 39
    Flexibility
  • 19
    Free & paid plans
  • 16
    Great customer support
  • 15
    Makes my life easier
  • 10
    Adapts automatically as i scale up
  • 9
    Easy setup and plugins
  • 8
    Super easy and powerful
  • 7
    In-context collaboration
  • 7
    AWS support
  • 6
    Rich in features
  • 5
    Docker support
  • 4
    Cute logo
  • 4
    Source control and bug tracking
  • 4
    Monitor almost everything
  • 4
    Cost
  • 4
    Full visibility of applications
  • 4
    Simple, powerful, great for infra
  • 4
    Easy to Analyze
  • 4
    Best than others
  • 4
    Automation tools
  • 3
    Best in the field
  • 3
    Free setup
  • 3
    Good for Startups
  • 3
    Expensive
  • 2
    APM
CONS OF DATADOG
  • 19
    Expensive
  • 4
    No errors exception tracking
  • 2
    External Network Goes Down You Wont Be Logging
  • 1
    Complicated

related Datadog posts

Noah Zoschke
Engineering Manager at Segment · | 30 upvotes · 268.3K views

We just launched the Segment Config API (try it out for yourself here) — a set of public REST APIs that enable you to manage your Segment configuration. Behind the scenes the Config API is built with Go , GRPC and Envoy.

At Segment, we build new services in Go by default. The language is simple so new team members quickly ramp up on a codebase. The tool chain is fast so developers get immediate feedback when they break code, tests or integrations with other systems. The runtime is fast so it performs great at scale.

For the newest round of APIs we adopted the GRPC service #framework.

The Protocol Buffer service definition language makes it easy to design type-safe and consistent APIs, thanks to ecosystem tools like the Google API Design Guide for API standards, uber/prototool for formatting and linting .protos and lyft/protoc-gen-validate for defining field validations, and grpc-gateway for defining REST mapping.

With a well designed .proto, its easy to generate a Go server interface and a TypeScript client, providing type-safe RPC between languages.

For the API gateway and RPC we adopted the Envoy service proxy.

The internet-facing segmentapis.com endpoint is an Envoy front proxy that rate-limits and authenticates every request. It then transcodes a #REST / #JSON request to an upstream GRPC request. The upstream GRPC servers are running an Envoy sidecar configured for Datadog stats.

The result is API #security , #reliability and consistent #observability through Envoy configuration, not code.

We experimented with Swagger service definitions, but the spec is sprawling and the generated clients and server stubs leave a lot to be desired. GRPC and .proto and the Go implementation feels better designed and implemented. Thanks to the GRPC tooling and ecosystem you can generate Swagger from .protos, but it’s effectively impossible to go the other way.

See more
Robert Zuber

Our primary source of monitoring and alerting is Datadog. We’ve got prebuilt dashboards for every scenario and integration with PagerDuty to manage routing any alerts. We’ve definitely scaled past the point where managing dashboards is easy, but we haven’t had time to invest in using features like Anomaly Detection. We’ve started using Honeycomb for some targeted debugging of complex production issues and we are liking what we’ve seen. We capture any unhandled exceptions with Rollbar and, if we realize one will keep happening, we quickly convert the metrics to point back to Datadog, to keep Rollbar as clean as possible.

We use Segment to consolidate all of our trackers, the most important of which goes to Amplitude to analyze user patterns. However, if we need a more consolidated view, we push all of our data to our own data warehouse running PostgreSQL; this is available for analytics and dashboard creation through Looker.

See more
Solr logo

Solr

774
643
126
A blazing-fast, open source enterprise search platform
774
643
+ 1
126
PROS OF SOLR
  • 35
    Powerful
  • 22
    Indexing and searching
  • 20
    Scalable
  • 19
    Customizable
  • 13
    Enterprise Ready
  • 5
    Restful
  • 5
    Apache Software Foundation
  • 4
    Great Search engine
  • 2
    Security built-in
  • 1
    Easy Operating
CONS OF SOLR
    Be the first to leave a con

    related Solr posts

    Ganesa Vijayakumar
    Full Stack Coder | Technical Lead · | 19 upvotes · 4.5M views

    I'm planning to create a web application and also a mobile application to provide a very good shopping experience to the end customers. Shortly, my application will be aggregate the product details from difference sources and giving a clear picture to the user that when and where to buy that product with best in Quality and cost.

    I have planned to develop this in many milestones for adding N number of features and I have picked my first part to complete the core part (aggregate the product details from different sources).

    As per my work experience and knowledge, I have chosen the followings stacks to this mission.

    UI: I would like to develop this application using React, React Router and React Native since I'm a little bit familiar on this and also most importantly these will help on developing both web and mobile apps. In addition, I'm gonna use the stacks JavaScript, jQuery, jQuery UI, jQuery Mobile, Bootstrap wherever required.

    Service: I have planned to use Java as the main business layer language as I have 7+ years of experience on this I believe I can do better work using Java than other languages. In addition, I'm thinking to use the stacks Node.js.

    Database and ORM: I'm gonna pick MySQL as DB and Hibernate as ORM since I have a piece of good knowledge and also work experience on this combination.

    Search Engine: I need to deal with a large amount of product data and it's in-detailed info to provide enough details to end user at the same time I need to focus on the performance area too. so I have decided to use Solr as a search engine for product search and suggestions. In addition, I'm thinking to replace Solr by Elasticsearch once explored/reviewed enough about Elasticsearch.

    Host: As of now, my plan to complete the application with decent features first and deploy it in a free hosting environment like Docker and Heroku and then once it is stable then I have planned to use the AWS products Amazon S3, EC2, Amazon RDS and Amazon Route 53. I'm not sure about Microsoft Azure that what is the specialty in it than Heroku and Amazon EC2 Container Service. Anyhow, I will do explore these once again and pick the best suite one for my requirement once I reached this level.

    Build and Repositories: I have decided to choose Apache Maven and Git as these are my favorites and also so popular on respectively build and repositories.

    Additional Utilities :) - I would like to choose Codacy for code review as their Startup plan will be very helpful to this application. I'm already experienced with Google CheckStyle and SonarQube even I'm looking something on Codacy.

    Happy Coding! Suggestions are welcome! :)

    Thanks, Ganesa

    See more
    Shared insights
    on
    SolrSolrPHPPHPJavaJavaMySQLMySQL
    at

    One of the earliest public references to Slack’s stack comes from a Twitter conversation. The Slack account states that “the messaging server is java, the app is php, db is mysql and solr for search,” and that uploaded files are “Stored on S3, but private files require authentication so requests go through the app.”

    See more
    Lucene logo

    Lucene

    169
    228
    2
    A high-performance, full-featured text search engine library written entirely in Java
    169
    228
    + 1
    2
    PROS OF LUCENE
    • 1
      Fast
    • 1
      Small
    CONS OF LUCENE
      Be the first to leave a con

      related Lucene posts

      Shared insights
      on
      SolrSolrLuceneLucene
      at

      "Slack provides two strategies for searching: Recent and Relevant. Recent search finds the messages that match all terms and presents them in reverse chronological order. If a user is trying to recall something that just happened, Recent is a useful presentation of the results.

      Relevant search relaxes the age constraint and takes into account the Lucene score of the document — how well it matches the query terms (Solr powers search at Slack). Used about 17% of the time, Relevant search performed slightly worse than Recent according to the search quality metrics we measured: the number of clicks per search and the click-through rate of the search results in the top several positions. We recognized that Relevant search could benefit from using the user’s interaction history with channels and other users — their ‘work graph’."

      See more
      MongoDB logo

      MongoDB

      91.7K
      79.2K
      4.1K
      The database for giant ideas
      91.7K
      79.2K
      + 1
      4.1K
      PROS OF MONGODB
      • 827
        Document-oriented storage
      • 593
        No sql
      • 553
        Ease of use
      • 464
        Fast
      • 410
        High performance
      • 257
        Free
      • 218
        Open source
      • 180
        Flexible
      • 145
        Replication & high availability
      • 112
        Easy to maintain
      • 42
        Querying
      • 39
        Easy scalability
      • 38
        Auto-sharding
      • 37
        High availability
      • 31
        Map/reduce
      • 27
        Document database
      • 25
        Easy setup
      • 25
        Full index support
      • 16
        Reliable
      • 15
        Fast in-place updates
      • 14
        Agile programming, flexible, fast
      • 12
        No database migrations
      • 8
        Easy integration with Node.Js
      • 8
        Enterprise
      • 6
        Enterprise Support
      • 5
        Great NoSQL DB
      • 4
        Support for many languages through different drivers
      • 3
        Drivers support is good
      • 3
        Aggregation Framework
      • 3
        Schemaless
      • 2
        Fast
      • 2
        Managed service
      • 2
        Easy to Scale
      • 2
        Awesome
      • 2
        Consistent
      • 1
        Good GUI
      • 1
        Acid Compliant
      CONS OF MONGODB
      • 6
        Very slowly for connected models that require joins
      • 3
        Not acid compliant
      • 1
        Proprietary query language

      related MongoDB posts

      Shared insights
      on
      Node.jsNode.jsGraphQLGraphQLMongoDBMongoDB

      I just finished the very first version of my new hobby project: #MovieGeeks. It is a minimalist online movie catalog for you to save the movies you want to see and for rating the movies you already saw. This is just the beginning as I am planning to add more features on the lines of sharing and discovery

      For the #BackEnd I decided to use Node.js , GraphQL and MongoDB:

      1. Node.js has a huge community so it will always be a safe choice in terms of libraries and finding solutions to problems you may have

      2. GraphQL because I needed to improve my skills with it and because I was never comfortable with the usual REST approach. I believe GraphQL is a better option as it feels more natural to write apis, it improves the development velocity, by definition it fixes the over-fetching and under-fetching problem that is so common on REST apis, and on top of that, the community is getting bigger and bigger.

      3. MongoDB was my choice for the database as I already have a lot of experience working on it and because, despite of some bad reputation it has acquired in the last months, I still believe it is a powerful database for at least a very long list of use cases such as the one I needed for my website

      See more
      Vaibhav Taunk
      Team Lead at Technovert · | 31 upvotes · 3.7M views

      I am starting to become a full-stack developer, by choosing and learning .NET Core for API Development, Angular CLI / React for UI Development, MongoDB for database, as it a NoSQL DB and Flutter / React Native for Mobile App Development. Using Postman, Markdown and Visual Studio Code for development.

      See more
      Algolia logo

      Algolia

      1.3K
      1.1K
      697
      Developer-friendly API and complete set of tools for building search
      1.3K
      1.1K
      + 1
      697
      PROS OF ALGOLIA
      • 126
        Ultra fast
      • 95
        Super easy to implement
      • 73
        Modern search engine
      • 71
        Excellent support
      • 70
        Easy setup, fast and relevant
      • 46
        Typos handling
      • 40
        Search analytics
      • 31
        Designed to search records, not pages
      • 30
        Distributed Search Network
      • 30
        Multiple datacenters
      • 10
        Smart Highlighting
      • 9
        Search as you type
      • 8
        Multi-attributes
      • 8
        Instantsearch.js
      • 6
        Super fast, easy to set up
      • 5
        Database search
      • 5
        Amazing uptime
      • 4
        Realtime
      • 4
        Github-awesome-autocomple
      • 4
        Great documentation
      • 4
        Highly customizable
      • 3
        Beautiful UI
      • 3
        Powerful Search
      • 3
        Places.js
      • 2
        Awesome aanltiycs and typos hnadling
      • 2
        Integrates with just about everything
      • 1
        Developer-friendly frontend libraries
      • 1
        Ok to use
      • 1
        Fast response time
      • 1
        Github integration
      • 1
        Smooth platform
      • 0
        Fuck
      • 0
        Giitera
      • 0
        Is it fool
      • 0
        Nooo
      CONS OF ALGOLIA
      • 11
        Expensive

      related Algolia posts

      Josh Dzielak
      Co-Founder & CTO at Orbit · | 19 upvotes · 428.8K views

      Shortly after I joined Algolia as a developer advocate, I knew I wanted to establish a place for the community to congregate and share their projects, questions and advice. There are a ton of platforms out there that can be used to host communities, and they tend to fall into two categories - real-time sync (like chat) and async (like forums). Because the community was already large, I felt that a chat platform like Discord or Gitter might be overwhelming and opted for a forum-like solution instead (which would also create content that's searchable from Google).

      I looked at paid, closed-source options like AnswerHub and ForumBee and old-school solutions like phpBB and vBulletin, but none seemed to offer the power, flexibility and developer-friendliness of Discourse. Discourse is open source, written in Rails with Ember.js on the front-end. That made me confident I could modify it to meet our exact needs. Discourse's own forum is very active which made me confident I could get help if I needed it.

      It took about a month to get Discourse up-and-running and make authentication tied to algolia.com via the SSO plugin. Adding additional plugins for moderation or look-and-feel customization was fairly straightforward, and I even created a plugin to make the forum content searchable with Algolia. To stay on top of answering questions and moderation, we used the Discourse API to publish new messages into our Slack. All-in-all I would say we were happy with Discourse - the only caveat would be that it's very helpful to have technical knowledge as well as Rails knowledge in order to get the most out of it.

      See more
      Julien DeFrance
      Principal Software Engineer at Tophatter · | 16 upvotes · 3.1M views

      Back in 2014, I was given an opportunity to re-architect SmartZip Analytics platform, and flagship product: SmartTargeting. This is a SaaS software helping real estate professionals keeping up with their prospects and leads in a given neighborhood/territory, finding out (thanks to predictive analytics) who's the most likely to list/sell their home, and running cross-channel marketing automation against them: direct mail, online ads, email... The company also does provide Data APIs to Enterprise customers.

      I had inherited years and years of technical debt and I knew things had to change radically. The first enabler to this was to make use of the cloud and go with AWS, so we would stop re-inventing the wheel, and build around managed/scalable services.

      For the SaaS product, we kept on working with Rails as this was what my team had the most knowledge in. We've however broken up the monolith and decoupled the front-end application from the backend thanks to the use of Rails API so we'd get independently scalable micro-services from now on.

      Our various applications could now be deployed using AWS Elastic Beanstalk so we wouldn't waste any more efforts writing time-consuming Capistrano deployment scripts for instance. Combined with Docker so our application would run within its own container, independently from the underlying host configuration.

      Storage-wise, we went with Amazon S3 and ditched any pre-existing local or network storage people used to deal with in our legacy systems. On the database side: Amazon RDS / MySQL initially. Ultimately migrated to Amazon RDS for Aurora / MySQL when it got released. Once again, here you need a managed service your cloud provider handles for you.

      Future improvements / technology decisions included:

      Caching: Amazon ElastiCache / Memcached CDN: Amazon CloudFront Systems Integration: Segment / Zapier Data-warehousing: Amazon Redshift BI: Amazon Quicksight / Superset Search: Elasticsearch / Amazon Elasticsearch Service / Algolia Monitoring: New Relic

      As our usage grows, patterns changed, and/or our business needs evolved, my role as Engineering Manager then Director of Engineering was also to ensure my team kept on learning and innovating, while delivering on business value.

      One of these innovations was to get ourselves into Serverless : Adopting AWS Lambda was a big step forward. At the time, only available for Node.js (Not Ruby ) but a great way to handle cost efficiency, unpredictable traffic, sudden bursts of traffic... Ultimately you want the whole chain of services involved in a call to be serverless, and that's when we've started leveraging Amazon DynamoDB on these projects so they'd be fully scalable.

      See more
      Splunk logo

      Splunk

      598
      1K
      20
      Search, monitor, analyze and visualize machine data
      598
      1K
      + 1
      20
      PROS OF SPLUNK
      • 3
        API for searching logs, running reports
      • 3
        Alert system based on custom query results
      • 2
        Dashboarding on any log contents
      • 2
        Custom log parsing as well as automatic parsing
      • 2
        Ability to style search results into reports
      • 2
        Query engine supports joining, aggregation, stats, etc
      • 2
        Splunk language supports string, date manip, math, etc
      • 2
        Rich GUI for searching live logs
      • 1
        Query any log as key-value pairs
      • 1
        Granular scheduling and time window support
      CONS OF SPLUNK
      • 1
        Splunk query language rich so lots to learn

      related Splunk posts

      Shared insights
      on
      SplunkSplunkDjangoDjango

      I am designing a Django application for my organization which will be used as an internal tool. The infra team said that I will not be having SSH access to the production server and I will have to log all my backend application messages to Splunk. I have no knowledge of Splunk so the following are the approaches I am considering: Approach 1: Create an hourly cron job that uploads the server log file to some Splunk storage for later analysis. - Is this possible? Approach 2: Is it possible just to stream the logs to some splunk endpoint? (If yes, I feel network usage and communication overhead will be a pain-point for my application)

      Is there any better or standard approach? Thanks in advance.

      See more
      Shared insights
      on
      KibanaKibanaSplunkSplunkGrafanaGrafana

      I use Kibana because it ships with the ELK stack. I don't find it as powerful as Splunk however it is light years above grepping through log files. We previously used Grafana but found it to be annoying to maintain a separate tool outside of the ELK stack. We were able to get everything we needed from Kibana.

      See more
      Kibana logo

      Kibana

      20.1K
      16K
      261
      Visualize your Elasticsearch data and navigate the Elastic Stack
      20.1K
      16K
      + 1
      261
      PROS OF KIBANA
      • 88
        Easy to setup
      • 64
        Free
      • 45
        Can search text
      • 21
        Has pie chart
      • 13
        X-axis is not restricted to timestamp
      • 9
        Easy queries and is a good way to view logs
      • 6
        Supports Plugins
      • 4
        Dev Tools
      • 3
        Can build dashboards
      • 3
        More "user-friendly"
      • 2
        Out-of-Box Dashboards/Analytics for Metrics/Heartbeat
      • 2
        Easy to drill-down
      • 1
        Up and running
      CONS OF KIBANA
      • 6
        Unintuituve
      • 4
        Elasticsearch is huge
      • 3
        Hardweight UI
      • 3
        Works on top of elastic only

      related Kibana posts

      Tymoteusz Paul
      Devops guy at X20X Development LTD · | 23 upvotes · 8.1M views

      Often enough I have to explain my way of going about setting up a CI/CD pipeline with multiple deployment platforms. Since I am a bit tired of yapping the same every single time, I've decided to write it up and share with the world this way, and send people to read it instead ;). I will explain it on "live-example" of how the Rome got built, basing that current methodology exists only of readme.md and wishes of good luck (as it usually is ;)).

      It always starts with an app, whatever it may be and reading the readmes available while Vagrant and VirtualBox is installing and updating. Following that is the first hurdle to go over - convert all the instruction/scripts into Ansible playbook(s), and only stopping when doing a clear vagrant up or vagrant reload we will have a fully working environment. As our Vagrant environment is now functional, it's time to break it! This is the moment to look for how things can be done better (too rigid/too lose versioning? Sloppy environment setup?) and replace them with the right way to do stuff, one that won't bite us in the backside. This is the point, and the best opportunity, to upcycle the existing way of doing dev environment to produce a proper, production-grade product.

      I should probably digress here for a moment and explain why. I firmly believe that the way you deploy production is the same way you should deploy develop, shy of few debugging-friendly setting. This way you avoid the discrepancy between how production work vs how development works, which almost always causes major pains in the back of the neck, and with use of proper tools should mean no more work for the developers. That's why we start with Vagrant as developer boxes should be as easy as vagrant up, but the meat of our product lies in Ansible which will do meat of the work and can be applied to almost anything: AWS, bare metal, docker, LXC, in open net, behind vpn - you name it.

      We must also give proper consideration to monitoring and logging hoovering at this point. My generic answer here is to grab Elasticsearch, Kibana, and Logstash. While for different use cases there may be better solutions, this one is well battle-tested, performs reasonably and is very easy to scale both vertically (within some limits) and horizontally. Logstash rules are easy to write and are well supported in maintenance through Ansible, which as I've mentioned earlier, are at the very core of things, and creating triggers/reports and alerts based on Elastic and Kibana is generally a breeze, including some quite complex aggregations.

      If we are happy with the state of the Ansible it's time to move on and put all those roles and playbooks to work. Namely, we need something to manage our CI/CD pipelines. For me, the choice is obvious: TeamCity. It's modern, robust and unlike most of the light-weight alternatives, it's transparent. What I mean by that is that it doesn't tell you how to do things, doesn't limit your ways to deploy, or test, or package for that matter. Instead, it provides a developer-friendly and rich playground for your pipelines. You can do most the same with Jenkins, but it has a quite dated look and feel to it, while also missing some key functionality that must be brought in via plugins (like quality REST API which comes built-in with TeamCity). It also comes with all the common-handy plugins like Slack or Apache Maven integration.

      The exact flow between CI and CD varies too greatly from one application to another to describe, so I will outline a few rules that guide me in it: 1. Make build steps as small as possible. This way when something breaks, we know exactly where, without needing to dig and root around. 2. All security credentials besides development environment must be sources from individual Vault instances. Keys to those containers should exist only on the CI/CD box and accessible by a few people (the less the better). This is pretty self-explanatory, as anything besides dev may contain sensitive data and, at times, be public-facing. Because of that appropriate security must be present. TeamCity shines in this department with excellent secrets-management. 3. Every part of the build chain shall consume and produce artifacts. If it creates nothing, it likely shouldn't be its own build. This way if any issue shows up with any environment or version, all developer has to do it is grab appropriate artifacts to reproduce the issue locally. 4. Deployment builds should be directly tied to specific Git branches/tags. This enables much easier tracking of what caused an issue, including automated identifying and tagging the author (nothing like automated regression testing!).

      Speaking of deployments, I generally try to keep it simple but also with a close eye on the wallet. Because of that, I am more than happy with AWS or another cloud provider, but also constantly peeking at the loads and do we get the value of what we are paying for. Often enough the pattern of use is not constantly erratic, but rather has a firm baseline which could be migrated away from the cloud and into bare metal boxes. That is another part where this approach strongly triumphs over the common Docker and CircleCI setup, where you are very much tied in to use cloud providers and getting out is expensive. Here to embrace bare-metal hosting all you need is a help of some container-based self-hosting software, my personal preference is with Proxmox and LXC. Following that all you must write are ansible scripts to manage hardware of Proxmox, similar way as you do for Amazon EC2 (ansible supports both greatly) and you are good to go. One does not exclude another, quite the opposite, as they can live in great synergy and cut your costs dramatically (the heavier your base load, the bigger the savings) while providing production-grade resiliency.

      See more
      Tassanai Singprom

      This is my stack in Application & Data

      JavaScript PHP HTML5 jQuery Redis Amazon EC2 Ubuntu Sass Vue.js Firebase Laravel Lumen Amazon RDS GraphQL MariaDB

      My Utilities Tools

      Google Analytics Postman Elasticsearch

      My Devops Tools

      Git GitHub GitLab npm Visual Studio Code Kibana Sentry BrowserStack

      My Business Tools

      Slack

      See more
      Cassandra logo

      Cassandra

      3.5K
      3.5K
      507
      A partitioned row store. Rows are organized into tables with a required primary key.
      3.5K
      3.5K
      + 1
      507
      PROS OF CASSANDRA
      • 119
        Distributed
      • 98
        High performance
      • 81
        High availability
      • 74
        Easy scalability
      • 53
        Replication
      • 26
        Reliable
      • 26
        Multi datacenter deployments
      • 10
        Schema optional
      • 9
        OLTP
      • 8
        Open source
      • 2
        Workload separation (via MDC)
      • 1
        Fast
      CONS OF CASSANDRA
      • 3
        Reliability of replication
      • 1
        Size
      • 1
        Updates

      related Cassandra posts

      Thierry Schellenbach
      Shared insights
      on
      GolangGolangPythonPythonCassandraCassandra
      at

      After years of optimizing our existing feed technology, we decided to make a larger leap with 2.0 of Stream. While the first iteration of Stream was powered by Python and Cassandra, for Stream 2.0 of our infrastructure we switched to Go.

      The main reason why we switched from Python to Go is performance. Certain features of Stream such as aggregation, ranking and serialization were very difficult to speed up using Python.

      We’ve been using Go since March 2017 and it’s been a great experience so far. Go has greatly increased the productivity of our development team. Not only has it improved the speed at which we develop, it’s also 30x faster for many components of Stream. Initially we struggled a bit with package management for Go. However, using Dep together with the VG package contributed to creating a great workflow.

      Go as a language is heavily focused on performance. The built-in PPROF tool is amazing for finding performance issues. Uber’s Go-Torch library is great for visualizing data from PPROF and will be bundled in PPROF in Go 1.10.

      The performance of Go greatly influenced our architecture in a positive way. With Python we often found ourselves delegating logic to the database layer purely for performance reasons. The high performance of Go gave us more flexibility in terms of architecture. This led to a huge simplification of our infrastructure and a dramatic improvement of latency. For instance, we saw a 10 to 1 reduction in web-server count thanks to the lower memory and CPU usage for the same number of requests.

      #DataStores #Databases

      See more
      Thierry Schellenbach
      Shared insights
      on
      RedisRedisCassandraCassandraRocksDBRocksDB
      at

      1.0 of Stream leveraged Cassandra for storing the feed. Cassandra is a common choice for building feeds. Instagram, for instance started, out with Redis but eventually switched to Cassandra to handle their rapid usage growth. Cassandra can handle write heavy workloads very efficiently.

      Cassandra is a great tool that allows you to scale write capacity simply by adding more nodes, though it is also very complex. This complexity made it hard to diagnose performance fluctuations. Even though we had years of experience with running Cassandra, it still felt like a bit of a black box. When building Stream 2.0 we decided to go for a different approach and build Keevo. Keevo is our in-house key-value store built upon RocksDB, gRPC and Raft.

      RocksDB is a highly performant embeddable database library developed and maintained by Facebook’s data engineering team. RocksDB started as a fork of Google’s LevelDB that introduced several performance improvements for SSD. Nowadays RocksDB is a project on its own and is under active development. It is written in C++ and it’s fast. Have a look at how this benchmark handles 7 million QPS. In terms of technology it’s much more simple than Cassandra.

      This translates into reduced maintenance overhead, improved performance and, most importantly, more consistent performance. It’s interesting to note that LinkedIn also uses RocksDB for their feed.

      #InMemoryDatabases #DataStores #Databases

      See more