DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
| ID | IEP-36 |
| Author | Denis Magda |
| Sponsor | Denis Magda |
| Created |
|
| Status | IN PROGRESS |
Ignite codebase and release packages mix both core capabilities with 3rd party integrations. It leads to the following:
The goal of the IEP is to solve these challenges by doing the following:
Below you can find a definition of Ignite core, list of modules to be supported by the community and integrations that will go out of the community control.
Ignite core is a set of features and components that define the project's key capabilities and benefits such as a distributed memory-centric storage, RDBMS acceleration, transactions, and more. Most of such components are developed from scratch by the community and have minimal dependencies on 3rd parties:
Ignite modules are integrations that will be developed, supported, and released by Ignite community. Such integrations are important ones and have either significant or growing demand. Presently, the list is as follows:
Each module has to satisfy the following criteria:
A module needs to be released and packaged in the form of:
Even though the modules are released and packaged separately, there has to be an easy way to move modules' binaries to the Ignite core folder:
Thin clients are a special type of Ignite modules:
Thin clients should be stored in separate repositories and packaged in different forms - binaries, Maven/Nuget/Npmjs (depending on a language type). The clients can be released independently of the core.
Below is a list of existing integrations that won't be turned into Ignite modules but rather would be moved to separate Github repositories and won't be maintained by Ignite community for every core release. If later the community sees demand for an unsupported integration, it can be taken back and be officially supported (testing, dev, releases, compatibility with the core) as an Ignite module.
We discussed in dev list[1] and agreed on creating a new repository for hosting our Ignite integrations.
As discussed [2] with respect to releases all the extensions need to be verified for an upcoming release and updated if needed (with the version increase only for those updated)
The list of integrations that to be moved to independent Github repositories and will not be supported by the community for every Ignite release:
| Integration Name | +1 (explain if needed) | -1 (with explanation) |
|---|---|---|
| Kafka | ||
Unknown User (dmagda) - that's a side project for apps that use Twitter. | ||
| ZeroMQ | Unknown User (dmagda) - low usage, better to have as an independent Github project that can be maintained by anybody. | Unknown User (zaleslaw) - all streaming tools/modules should be kept in one place (as part of AI or as Streaming AI separate project) |
| RocketMQ | Unknown User (dmagda) - low usage, better to have as an independent Github project that can be maintained by anybody. | Unknown User (zaleslaw) - all streaming tools/modules should be kept in one place (as part of AI or as Streaming AI separate project) |
| Storm | Unknown User (dmagda) - low usage, better to have as an independent Github project that can be maintained by anybody. | Unknown User (zaleslaw) - all streaming tools/modules should be kept in one place (as part of AI or as Streaming AI separate project) |
| Flume | Unknown User (dmagda) - low usage, better to have as an independent Github project that can be maintained by anybody. | Unknown User (zaleslaw) - all ETL tools/modules should be kept in one place (as part of AI or as ETL AI separate project) I mean that Flume is tool for loading big datasets to AI |
| Flink | Unknown User (dmagda) - low usage, better to have as an independent Github project that can be maintained by anybody. | Unknown User (zaleslaw) - all streaming tools/modules should be kept in one place (as part of AI or as Streaming AI separate project) |
| MQTT | Unknown User (dmagda) - low usage, better to have as an independent Github project that can be maintained by anybody. | |
| Camel | Unknown User (dmagda) - low usage, better to have as an independent Github project that can be maintained by anybody. | |
| Hibernate | Unknown User (dmagda) - Spring Data gets much bigger adoption for Ignite deployments. Don't see a lot of traction with Hibernate. It's hard to maintain it in various variations - Ignite goes with several modules of different versions. Better to have as an independent Github project with forks for specific Hibernate versions. | Unknown User (zaleslaw) - I suppose it's useful feature for wide adoption among Java Devs who use AI not like cache, but like database |
| JMS | Unknown User (dmagda) - low usage, better to have as an independent Github project that can be maintained by anybody. | Unknown User (zaleslaw) - all streaming tools/modules should be kept in one place (as part of AI or as Streaming AI separate project). Also, I didn't see the Kafka Integration in this list |
| AOP-Based Grid | Unknown User (dmagda) - low usage, better to have as an independent Github project that can be maintained by anybody. Unknown User (agoncharuk) Maybe drop it at all because moving this into a separate project may be a pain - a lot of internal API usages | |
| JSR-107(JCache) | Unknown User (dmagda) - don't see any value in supporting this JSR rather than claiming that specification. It's better to have much cleaner Ignite key-value API without any dependencies influenced by the specification. | Unknown User (zaleslaw) we should ask about that question the user-community, I have heard many times that that the JCache implementation is important for Java Devs Ivan Pavlukhin It is quite natural for me to imagine integration with Ignite using some kind of standard API. The situation with JCache is similar to JDBC. AFAIR Spring has a JCache integration. If we are going to evolve caching trait then we should support easy integartion with Spring. If there alternatives to JCache then we should consider them. |
| OSGi | Unknown User (dmagda) - this integration is already broken and badly maintained. Haven't come across anybody who uses OSGi in the projects Ignite is targeted for. | |
| YARN | Unknown User (dmagda) - not sure it's useful any longer and should be supported by the community. Unknown User (zaleslaw) What was the purpose of this integration? | |
| Mesos | Unknown User (dmagda) - not sure it's useful any longer and should be supported by the community. Unknown User (zaleslaw) What was the purpose of this integration? | |
.NET: Legacy Entity Framework and ASP.NET integrations | Unknown User (dmagda) - outdated, needs to be replaced with a new one version. Unknown User (ptupitsyn) integrations with legacy technologies; also blocks .NET Core migration | |
| Scalar | Unknown User (agoncharuk) Not used, brings unnecessary dependency on scala, adds library conflicts |
The list of the integrations to be removed completely (don't even move them to an independent Github repo):
| Integration | +1 (explain if needed) | -1 (with explanation) |
|---|---|---|
Redis and Memcached protocols support | Unknown User (dmagda) - not sure why these 2 were supported in the first place. Sergey Kozlov - thin clients provide full and rich replacement | |
| ignite-clients module | Unknown User (dmagda) - we already have Thin Clients, duplicate features with fewer capabilities | |
Unknown User (dmagda) - community has already voted for the removal. | The community has already voted for the removal. Unknown User (zaleslaw) IGFS should be moved to the separate package in the first | |
| AOP-Based Grid | Unknown User (agoncharuk) Unused, hard to move to a separate module due to many internal API usages | |
| Ignite Schedule | Unknown User (agoncharuk) same issues as with local caches Sergey Kozlov - it can be implemeted in user code Unknown User (jokser) Ignite integration with distributed schedulers like Airflow or Oozie can be a better decision. |
As part of the modularization, that needs to be considered for Ignite 3.0, it's worthwhile listing all the APIs that the community is planning to remove in Ignite 3.0. The APIs can belong to both Ignite core and modules that will stay in Ignite and will be officially supported by the community:
| API | +1 (explain if needed) | -1 (with explanation) |
|---|---|---|
| Already deprecated APIs | ||
| Local caches | Alexey Kuznetsov Can we "emulate" local cache by partitioned with "node filter to one node"? Unknown User (agoncharuk) Local cache is meaningless in a distributed system, especially when a transaction is involved: suppose a prepare step completed and a node with local cache goes down. According to 2PC, we cannot proceed until the node goes up again | |
| Spatial indexes | Unknown User (dmagda) - the API is broken and not suited for production. Can be designed from scratch with Ignite 3.1 and 3.2. | Unknown User (zaleslaw) It could be removed only in the 3.1 then the new implementation will be provided in other case we will poor with indices |
| Full-text search | Unknown User (dmagda) - the API is broken and not suited for production. Can be designed from scratch with Ignite 3.1 and 3.2. | Unknown User (zaleslaw) It could be removed only in the 3.1 then the new implementation will be provided in other case we will poor with full-text indices |
| Checkpointing SPI | Unknown User (dmagda) - Ignite caches/tables can be used to store the checkpoints. This API is redundant. | |
| Ignite.lock | Unknown User (agoncharuk) The distributed lock concept is broken (see corresponding Aphyr video). The usual lock usage pattern is lock - update cache - unlock. The same semantics can be achieved using pessimistic transactions with keys locking, but instead, for an end-user, it is clear how lock can fail in a distributed system (transaction rollback). Unknown User (jokser) Very fragile API. Not tested well. Some failures can lead to unavailability of controlling such locks. Can be returned back and reworked after implementation of some consensus algorithm like Raft. | Unknown User (dmagda) - unless an alternate solution is provided as part of existing Transactional APIs. There has to be a clear migration guide for Ignite.lock customers. Unknown User (zaleslaw) It could be removed only in the 3.1 then the new implementation will be provided |
| Cache.lock | Unknown User (agoncharuk) Same arguments as with Ignite.lock, but even more redundant API | Unknown User (zaleslaw) It could be removed only in the 3.1 then the new implementation will be provided |
| Ignite Data Structures | Unknown User (jokser) Can be marked as not safe and reworked after implementation of some consensus algorithm like Raft. Ivan Pavlukhin The implementation quality is really not sufficient. As for me data structures in current flavor should not be used in production. We can deprecate current implementation as a first step. Later on we can add all necessarry implementations as they are ready and a required development effort seems not trivial. | Unknown User (dmagda) - that's basic functionality of every IMDG and in-memory cache. We can't remove it. Instead, let's plan through activities that improve or reconsider current implementations. Unknown User (zaleslaw) Agree with Unknown User (dmagda)also we should extend the list of basic structures (ready to help) |
| GAR files | ||
"Force server mode" for client nodes | Unknown User (dmagda) - don't see any value any longer. Unknown User (agoncharuk) Already deprecated | |
| Daemon nodes | Unknown User (dmagda) - Visorcmd has to be preserved and updated to another protocol Alexey Kuznetsov - Visorcmd should be merged with controls.sh | |
| CacheRebalanceMode.NONE and Rebalance Delay | Unknown User (dmagda) - it can break data consistency in a cluster. Also, remove force rebalance mode as it can be used only if rebalance delay is set. Unknown User (agoncharuk) The mode does not make sense, cannot be explained to an end-used | |
| Indexing SPI | Unknown User (dmagda) - it's highly unlikely that anybody used this. The community supports all the querying engines on its own. | |
| QueryEntities and Annotations based configuration of SQL | Unknown User (dmagda) - Alexey Goncharuk is going to propose an alternate API that unites these concepts. Sergey Kozlov - require full redesign, it should be fully compatible JDBC SQL and visa-versa | |
| @CentralizedAffinityFunction | Unknown User (agoncharuk) This API is no longer needed after exchange merge was introduced | |
| IgniteCache.localPeek, localEntries, localClear, localSize | Ivan Pavlukhin These methods look more like a debug stuff and have confusing semantics. At least should be moved outside of IgniteCache facade. | Anton Vinogradov Such API useful for tests and bug analysis |
http://apache-ignite-developers.2346864.n4.nabble.com/Ignite-Modularization-td42486.html
This initiative is also related to the discussion of Apache Ignite APIs update/removal - Apache Ignite 3.0 Wishlist
2 Comments
Ivan Pavlukhin
Aug 12, 2019Anton Vinogradov, do you think that
IgniteCache.localPeek(and friends) must be placed onIgniteCachefacade?Anton Vinogradov
Aug 12, 2019Ivan Pavlukhin I understand the idea that Ignite is distributed and it does not matter how it keeps the data, but why not?
For example localSize is a good feature to see how many data you have at this node. Do we have another facade for it?
Let's discuss each API method separately.
Anyway, that's not a first priority question.